继上一篇博客【注释和反射】类加载的过程-CSDN博客
目录
四、什么时候类会被初始化(主动引用)?
在Java中,类的初始化是类加载过程的一部分,具体地说,它发生在类加载的“初始化”阶段。但是,类的初始化并不会在类被加载到JVM时立即发生,而是在以下情况之一发生时才会被触发:
-
创建类的实例:当使用
new
关键字创建类的新实例时,如果该类还没有被初始化,则会触发类的初始化。 -
访问某个静态变量:当类中的静态变量被访问时(除非该静态变量是常量,即被
final
修饰的基本类型或字符串常量),如果该类尚未初始化,则会触发初始化。需要注意的是,只有真正读取静态变量的值才会触发初始化,而仅仅声明静态变量不会触发初始化。 -
调用类的静态方法:当调用类的静态方法时,如果该类还没有被初始化,则会先进行初始化。
-
反射:当使用Java反射API(如
Class.forName()
方法)显式加载类时,会触发类的初始化。这是框架和库常用的技术,用于动态加载和初始化类。 -
初始化子类:当初始化一个类时,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。
-
Java虚拟机启动时:当Java虚拟机启动时,会先初始化包含
</main
方法的那个类。