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时不会执行静态初始化程序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |