小编yel*_*owB的帖子

为什么引用静态 final 字段不会触发类加载?

我有一个这样的测试代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

它的输出是:

Constants Class Loaded!
C1
Run Code Online (Sandbox Code Playgroud)

因此,类 Constants 由 JVM 加载。但是如果我在类 Constants 的静态字段中添加一个 final 关键字:

public class Constants {
public static final String c1 = "C1";

static {
    System.out.println("Constants Class Loaded!");
}
}
Run Code Online (Sandbox Code Playgroud)

它的输出变为:

C1
Run Code Online (Sandbox Code Playgroud)

似乎没有加载类 Constants。

我的本地环境是:

OS: Win7 x64
JVM: JRockit (build R28.2.0-79-146777-1.6.0_29-20111005-1808-windows-ia32, compiled …
Run Code Online (Sandbox Code Playgroud)

java compiler-construction jvm

3
推荐指数
1
解决办法
710
查看次数

标签 统计

compiler-construction ×1

java ×1

jvm ×1