深入JVM-Class装载系统
一、Class文件的装载过程 Class类型通常以文件的形式存在(当然,任何二进制流都可以是Class类型),只有被Java虚拟机装载的Class类型才能在程序中使用。系统状态Class类型可以分为加载、连接和初始化3个步骤。其中,连接又可分为验证、准备和解析3步。 1.1 类装载的条件 Class只有在必须要使用的时候才会被装载,Java虚拟机不会无条件的装载Class类型。Java虚拟机规定,一个类或接口在初次使用前,必须要进行初始化。这里指的“使用”,是指主动使用,主动使用只有下列几种情况: 创建一个类的实例,比如使用new关键字,或者通过反射、克隆、反序列化。 使用类的静态方法时,即当使用了字节码invokestatic指令。 使用类或接口的静态字段(final常量除外),比如,使用getstatic或者putstatic指令。 使用java.lang.reflect包中的方法反射类的方法时。 当初始化子类时,要求先初始化父类。 作为启动虚拟机,含义main()方法的那个类。 除了以上的情况属于主动使用,其他的情况均属于被动使用。被动使用不会引起类的初始化。 主动引用的例子: public class Parent { static{ System.out.println("Parent init"); } } public class Child extends