主动引用(会初始化)
必须初始化:遇到new、 getstatic、 putstatic或invokestatic这四条字节码指令时
必须初始化:使用java.lang.reflect包的方法对类型进行反射调用的时候
必须初始化:当初始化类的时候, 如果发现其父类还没有进行过初始化
必须初始化:用户需要指定一个要执行的主类( 包含main()方法的那个类)
必须初始化:当使用JDK 7新加入的动态语言支持时, 如果一个java.lang.invoke.MethodHandle实例最后的解<br>析结果为REF_getStatic、 REF_putStatic、 REF_invokeStatic、 REF_newInvokeSpecial四种类型的方法句<br>柄, 并且这个方法句柄对应的类没有进行过初始化, 则需要先触发其初始化
必须初始化:当一个接口中定义了JDK 8新加入的默认方法( 被default关键字修饰的接口方法) 时, 如果有<br>这个接口的实现类发生了初始化, 那该接口要在其之前被初始化。
被动引用(不会初始化)
子类引用父类静态字段,子类不会初始化
数组定义来引用类, 不会触发此类的初始化,即new OneClass[10]
常量在编译阶段会存入调用类的常量池中, 本质上没有直接引用到定义常量的类, 因此不会初始化定义常量的类