静态代码块会在类初始化阶段执行。
final static 类型的成员,不会初始化类。
父类的static类型的变量,只会初始化父类,不会初始化子类。
定义类的数组类型变量,不会触发初始化。
如下几种情形,如果类未初始化,对类进行初始化
1.创建类的实例。
2.访问静态变量(除了常量【被final修辞的静态变量】原因:常量是一种特殊的变量,因为编译器把他们当成值而不是域来对待。如果你的代码中用到常变量,编译器会直接把这个值插入到引用常量的位置的字节码中。但是你需要改变final域的值,每一块域的代码都需要重新编译)
3.访问类的静态方法。
4.反射,如(Class.forName(“my.xyz.Test”))
5.初始化一个类的时候,如果父类还未初始化,则先触发父类的初始化
6.虚拟机启动的时候,定义了main方法的那个类先初始化。