类加载过程笔记总结

类的加载过程包含:
类的加载-链接(验证,准备,解析)-初始化
加载:
将java类的字节码加载到内存中,在内存的方法区中生成类的运行时数据,堆中生成该类的class 对象作为该类的运行入口。
运行时数据包含:静态变量,静态方法,常量池,类的代码。

链接:
验证:检查代码是否符合jvm的编码规范,进行安全检查。
准备:为静态变量分配内存并且初始化默认值。
解析:将代码中的符号引用变成直接引用。

初始化:执行类构造器方法的过程
类分为主动引用和被动引用两种方式,
主动引用(一定会对类进行初始化)
如下情况是对类的主动引用:
1. 使用new 关键字实例化类对象
2. 调用类的静态变量,静态方法
3. 通过反射reflect 调用类
4. 启动main方法的类一定会被初始化
5. 初始化一个类,如果父类没有被初始化,一定先初始化其父类。

被动引用(不会对类进行初始化):
如下情况对类不会进行初始化:
1. 引用常量,不会触发此类的初始化
2. 当通过数组定义类引用,也不会对该类初始化如:A[] as = new A[10];
3. 访问静态变量时,真正声明这个静态变量的类才会被初始化,继承的子类并不会被初始化

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章