1.当虚拟机启动时,加载用户指定的main方法所在的类。
2.当在main方法遇到了new关键字时,初始化new指令的目标类。
3.当遇到静态方法调用时,初始化静态方法所在的类。
4.当遇到静态字段调用时,初始化静态方法所在的类。
5.子类的初始化时会先触发父类的初始化。
6.使用反射调用某个类时,会初始化该类。
7.如果一个接口定义了default方法(jdk1.8新特性),那么直接实现或者间接实现该接口的类的初始化,会触发该接口的初始化。
测试:
执行class文件时,可以通过JVM参数 -verbose:class 查看类加载的先后顺序。
测试第一条和第二条。
public class TestClassLoader{
public static void main(String[] args){
Demo1 demo1 = new Demo1();
}
}
public class Demo1{
}