java - 如果引用的静态字段是最终的,为什么不执行静态初始值设定项

标签 java static final

<分区>

class a
{
    static final  int a =5;
    static {
        System.out.println("hi");

    }
}
class b
{
    public static void main(String[] args) {
        System.out.println(a.a);
    }   

}

为什么静态 block 不运行,输出只有

5

而如果我从类变量中删除 final 关键字,静态 block 将被执行并且输出变为

hi 
5

最佳答案

基本上发生的事情是原语和字符串上的 static final 组合导致它们被编译器内联,这可能阻止了静态初始化 block 的执行,因为 a 类永远不会被类加载器加载,因为 a.a 在编译期间被解析

关于java - 如果引用的静态字段是最终的,为什么不执行静态初始值设定项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23404521/

相关文章:

java - 最终变量的理解

java - Applet jar是浏览器下载的还是JVM下载的?

java - 我们可以使用java中的_id更新mongodb中的文档吗?

java - 使用 AppCompat 在 Android 中为按钮着色

c - 使用错误值初始化的静态变量

java - 变量需要声明为final

java - Firebase/Android : Get current user email

c# - CLR 如何处理静态类?

php - 在 iFrame 上打开链接 - PHP 或 JQuery

java - 你可以采取哪些步骤来使带有 setter 的 java 对象不可变?