虚拟机类加载机制:虚拟机把描述类的数据从 class 文件加载到内存,并对
数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java
类型。
Java 语言里,类型的加载和连接过程是在程序运行期间完成的。
类的生命周期:
加载 loading
验证 verification
准备 preparation
解析 resolution
初始化 initialization
使用 using
卸载 unloading
”
”
有且只有以下四种情况必须立即对类进行 初始化 (称为对一个类进行主动引
用):
1. 遇到 new、getstatic、putstatic、invokestatic 这四条字节码指令时(使
用 new 实例化对象的时候、读取或设置一个类的静态字段、调用一个类
的静态方法)。
2. 使用 java.lang.reflet 包的方法对类进行反射调用的时候。
3. 当初始化一个类的时候,如果发现其负类没有进行过初始化,则需要
先触发其父类的初始化。
4. 当虚拟机启动时,虚拟机会初始化主类(包含 main 方法的那个类)。
被动引用:
1. 通过子类引用父类的静态字段,不会导致子类初始化(对于静态字段,
只有直接定义这个字段的类才会被初始化)。