准备

准备阶段是正式为类中定义的变量(即静态变量)分配内存并设置变量初始值的阶段。

这里的初始值“通常情况”下是数据的零值。

public static int value = 123;

变量value在准备阶段过后的初始值为0而不是123,把value赋值为123的动作要到类的初始化阶段才会被执行。

public static final int value = 123;

编译时Javac将会为value生成ConstantValue属性。

如果类字段的字段属性表中存在ConstantValue属性,那在准备阶段变量值就会被初始化为ConstantValue属性

所指定的初始值。