直接定义了静态字段的类才会初始化
对于静态字段来说,只有直接定义了该字段的类才会初始化
public class MyTest1 {
public static void main(String[] args) {
System.out.println(MyChild1.str);
}
}
class MyParent1 {
public static String str = "hello world";
static {
System.out.println("MyParent1 static block.");
}
}
class MyChild1 extends MyParent1 {
public static String str2 = "welcome";
static {
System.out.println("MyChild1 static block.");
}
}
运行程序,输出如下:
根据输出的结果可以看到,尽管是MyChild1.str
来调用的,但是str
是属于MyParent1
的,因此可以证明:直接定义了静态字段的类才会初始化。尽管MyChild1
并没有初始化,但是MyChild1
是被加载了的,可以通过虚拟机参数: +XX:+TraceClassLoading
,来查看类的加载情况。
由上图可以看到,MyParent1
与MyChild1
都被加载了,但是只有MyParent1
被初始化了。因为一般情况下类的使用顺序是:加载—>连接—>初始化