加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 当我们调用静态最终变量时,为什么不首先执行静态块

发布时间:2020-12-15 04:49:49 所属栏目:Java 来源:网络整理
导读:参见英文答案 Static block in Java not executed????????????????????????????????????5个 class Test4 { public static void main(String as[]) { System.out.println(Hello.x); }}class Hello { final static int x=10; static { System.out.println("Hel
参见英文答案 > Static block in Java not executed????????????????????????????????????5个

class Test4 {
     public static void main(String as[]) {
         System.out.println(Hello.x); 
     }

}

class Hello {
    final static int x=10;
    static {
        System.out.println("Hello");                
    }
}

产量:10

根据我的知识,为什么不打印Hello如果我们调用静态变量然后加载第一个类,当加载类时,首先它应该执行静态块然后将发送静态变量.

解决方法

当包含它的类被初始化时执行静态初始化程序块 – 通常在加载类时.

您可以说当您在类Test4中访问Hello.x时,JVM应该加载并初始化类Hello.但是,这不会发生在这里,因为这是一个特例.

静态最终常量由编译器内联 – 这意味着在编译此代码时,main方法中的Hello.x在编译时被常量的值替换为10.本质上,您的代码编译为相同的字节码,就像你编译它时一样:

class Test4 {
    public static void main(String[] args) {
        System.out.println(10); // Inlined constant value here!
    }
}

class Hello {
    final static int x = 10;
    static {
        System.out.println("Hello");                
    }
}

请注意,在这种情况下,类Test4并不真正访问类Hello – 因此不会加载类Hello,并且在运行Test4时不会执行静态初始化程序.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读