这是一个快速的代码片段。对于类加载和初始化过程,我可以参考 JLS 第 12.4 和 12.5 节。仅当您访问非常量类的静态变量或可能访问静态方法时,才会加载该类。在我的情况下,我将变量声明为 final,删除 final 属性,检查类将被加载,静态初始化程序将运行。下面是修改后的代码
class staticFinalDemo1 {
//static final int var= 100;
static int var= 100;
static final void test() {
System.out.println("Static Final Method Test");
}
static {
System.out.println("Static Initializer");
}
}
class staticFinalDemo2 {
public static void main(String[] args) {
System.out.println(staticFinalDemo1.var);
//staticFinalDemo1.test();
}
}
现在我的观点是,如果我修改最终语句并将其替换为以下语句。
static final Integer var= 100;
静态初始化程序被加载。现在这个变量是一个常数。为什么在这种情况下加载静态初始化程序?是因为我使用了一个包装器对象,并且当我在类中引用它以供使用时,它的实例将被初始化?请澄清这个概念。
本