JVM学习笔记七 之 初始化(类型的生命周期系列)

初始化阶段是为类型变量赋予正确的初始值,初始化分为两个阶段:

1、如果直接超类还没有进行初始化,则先初始化直接超类。

2、如果类存在一个初始化方法<clinit>,则调用该方法。

<clinit>是在编译java源码时,按照静态块和静态变量赋值语句的顺序生成的。如果类没有静态块也没有为静态变量赋值,就不会生成<clinit>方法,该方法只能被虚拟机调用。

<clinit>由虚拟机自动调用,不需子类显示调用。接口也会生成<clinit>方法。jvm会保证多个线程同时加载一个类的时候,初始化块的运行顺序。

另外前边说到装载的时候已经提到,只有主动使用类的6种情况下才会初始化一个类,被动使用的时候不会初始化类。

你可能感兴趣的:(装载)