把一个类实例化的过程如下
JVM->装载Class->初始化除final外的静态变量,静态块,静态方法,类变量->做好被实例化的所有准备,等待被调用
当对一个类使用new关键字显式创建对象时,JVM会首先按照上面的步骤完成对象所属类的初始化工作,然后进入该类的构造方法中初始化对象。
当对象的引用被打断时,垃圾回收器会择时对该对象进行回收,并把对象转换成不可用状态。
最后从JVM中卸载该类。
因此如果一个类包含有静态常量(即:final修饰的静态变量)。那么当外界通过类名直接调用这个变量就不会导致JVM对该类进行装载,因此类中的静态块和其余部分不会完成初始化。
JVM->装载Class->初始化除final外的静态变量,静态块,静态方法,类变量->做好被实例化的所有准备,等待被调用
当对一个类使用new关键字显式创建对象时,JVM会首先按照上面的步骤完成对象所属类的初始化工作,然后进入该类的构造方法中初始化对象。
当对象的引用被打断时,垃圾回收器会择时对该对象进行回收,并把对象转换成不可用状态。
最后从JVM中卸载该类。
因此如果一个类包含有静态常量(即:final修饰的静态变量)。那么当外界通过类名直接调用这个变量就不会导致JVM对该类进行装载,因此类中的静态块和其余部分不会完成初始化。