首页 > 其他 > 详细

jvm学习:类的加载、连接、初始化

时间:2019-12-09 01:12:34      阅读:101      评论:0      收藏:0      [点我收藏+]

类在jvm中有这几个过程类的加载、连接、初始化、使用、卸载

类的加载

类的加载是将class文件中的二进制数据加载到内存中,将其放在运行时的数据区:方法区内,然后在内存中创建一个
java.lang.Class对象用来封装类在方法区内的数据结构。规范没有规定Class对象放在哪里,hotspot虚拟机将其放在了方法区中。
加载.class文件的方式
从本地系统中加载
从网络下载.class文件
从zip jar文件中加载
将java原文件动态的编译为.class文件,比如jsp

类的使用

java的类主动使用,才会执行初始化
主动使用
创建类的实例
访问某个类或者接口的非final变量、对改静态变量的赋值
调用类的静态方法
初始化一个类的子类
表明为启动类比如main方法
java1.7动态语言支持

例子

运行下面的例子可以先打印str1,然后打印str2。

package com.javalearn.jvm.classloader;

import lombok.extern.slf4j.Slf4j;

/**
 * 对于静态字段来说,只有直接使用定义了该字段的类才会被初始化
 * 当一个类加载要求父类加载完毕
 */
@Slf4j
public class MyTest {

    public static void main(String[] args) {
        log.info(MyChild1.str2);
    }
}

@Slf4j
class MyParent1 {
    public static String str1 = "hello";

    static {
        log.info("my parent static block");
    }
}

@Slf4j
class MyChild1 extends MyParent1 {
    public static String str2 ="hello child2";
    static {
        log.info("my child1 static block");
    }
}

结果

22:47:54.901 [main] INFO com.javalearn.jvm.classloader.MyParent1 - my parent static block
22:47:54.905 [main] INFO com.javalearn.jvm.classloader.MyChild1 - my child1 static block
22:47:54.905 [main] INFO com.javalearn.jvm.classloader.MyTest - hello child2

jvm学习:类的加载、连接、初始化

原文:https://www.cnblogs.com/JuncaiF/p/12008480.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!