background image

虚拟机类加载机制:虚拟机把描述类的数据从 class 文件加载到内存,并对
数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的 Java
类型。

Java 语言里,类型的加载和连接过程是在程序运行期间完成的。

 

类的生命周期:

 

  加载 loading

 

  验证 verification

 

  准备 preparation

 

  解析 resolution

 

  初始化 initialization

 

  使用 using

 

  卸载 unloading

 

有且只有以下四种情况必须立即对类进行 初始化 (称为对一个类进行主动引
用):

1. 遇到 new、getstatic、putstatic、invokestatic 这四条字节码指令时(使

用 new 实例化对象的时候、读取或设置一个类的静态字段、调用一个类
的静态方法)。

2. 使用 java.lang.reflet 包的方法对类进行反射调用的时候。
3. 当初始化一个类的时候,如果发现其负类没有进行过初始化,则需要

先触发其父类的初始化。

4. 当虚拟机启动时,虚拟机会初始化主类(包含 main 方法的那个类)。

 

被动引用:

1. 通过子类引用父类的静态字段,不会导致子类初始化(对于静态字段,

只有直接定义这个字段的类才会被初始化)。