第七章 虚拟机类加载机制
一 类的生命周期:
加载,验证,准备,解析,初始化,使用,卸载。
二 类的加载机制
四种必须初始化的情况:
1.遇到new,getstatic,pubstatic或invokestatic这四条字节吗指令时,如果没有进行过初始化,则需要进行触发其初始化
2.使用反射包的方法对类进行反射调用的时候,如果类没有进行初始化,则需要先触发类的初始化
3.当初始化一个类时,如果发现其父类还没初始化,则需要先触发其父类的初始化
4.当虚拟机启动时,用户需要一个要执行的主类(包含main方法的类),虚拟机会初始化这个主类
被动引用:
1.通过子类引用父类的静态字段,不会导致子类的初始化,
2.通过数组定义来引用类,不会触发此类的创建
3.常量在编译阶段会存入调用类到常量类中,本质上没有引用到定义常量的类,因此不会触发定义常量的类的初始化
三 接口的加载机制
接口的加载过程与类的加载过程稍有一些不同,类可以用static{}来输出初始化信息,而接口不能用static{}来输出初始化信息,但编译器会为接口生成
()构造器,用于初始化接口中所定义的成员变量
接口与类的真正区别:
当初始化一个类时,如果发现其父类还没初始化,则需要先触发其父类的初始化,但接口初始化并不要求其父类接口全部完成初始化,只有真正用到了父类接口才会初始化
阅读(995) | 评论(0) | 转发(0) |