1、关于加载的先后顺序
问题引入:
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");
}
}
在上一章节已经分析了结果为:
MyParent1 static block
hello world
原因是:对于静态变量来说,只有定义了该变量的类才会进行初始化。
现在的问题是:MyChild1有没有被加载?
对于这点,虚拟机并没有明确的规定,但是可以通过一些虚拟机参数查看到这一点:-XX:+TraceClassLoading
,用于追踪类的加载信息并打印出来。
配置虚拟机运行参数:
点击这个edit,然后在这个VM options中填写参数
然后apply之后,再运行main程序即可。
运行结果很多,只截取一部分:
这个结果内容特别多,表示虚拟机在当前的启动情况下,所加载的所有的类的信息。
在倒数第5、6行,显示加