我有这样的测试代码:
public class Constants {
public static String c1 = "C1";
static {
System.out.println("Constants Class Loaded!");
}
}
public class Test {
public static void main(String[] args) {
String c1 = Constants.c1;
System.out.println(c1);
}
}
其输出为:
Constants Class Loaded!
C1
因此,常量类由JVM加载.
但是,如果我在Constants类中的static字段中添加final关键字:
public class Constants {
public static final String c1 = "C1";
static {
System.out.println("Constants Class Loaded!");
}
}
其输出更改为:
C1
似乎未加载类Constants.
我的本地环境是:
OS: Win7 x64
JVM: JRockit (build R28.2.0-79-146777-1.6.0_29-20111005-1808-windows-ia32, compiled mode)
因此,我的问题是:
>为什么引用静态final字段不会触发类加载? JVM满足此代码后将做什么(字节码)?
>这种行为是否取决于特定的JVM?还是这是Java语言规范中的规则?
>优势是什么?不利吗?
谢谢.