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
我所知,如果我们调用静态变量然后加载第一个类,为什么它不打印,那么当加载类时,首先应执行静态块,然后发送静态变量。
静态初始化程序块在包含它的类被初始化时执行-通常在加载该类时执行。
您可能会说,在Hello
访问class 时,JVM应该加载并初始化Hello.x
class Test4
。但是,这不是在这里发生,因为这是特例。
static final
常量由编译器内联-这意味着在编译此代码时,Hello.x
在编译时将in main
方法替换为常量的值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
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句