public class ClassLoadTest {
public static void main(String[] args) {
Son son = new Son();
}
}
class Parent {
{
System.out.println("1:父类普通代码块");
}
static {
System.out.println("2: 父类static代码块");
}
public Parent() {
System.out.println("3:父类构造方法");
}
}
class Son extends Parent{
{
System.out.println("4:子类普通代码块");
}
static {
System.out.println("5:子类static代码块");
}
public Son() {
System.out.println("6:子类构造方法");
}
}
输出结果如下:
2: 父类static代码块 5:子类static代码块 1:父类普通代码块 3:父类构造方法 4:子类普通代码块 6:子类构造方法
顺序如下:
加载父类-按顺序执行父类中的static变量的赋值语句和static代码块;
加载子类-按顺序执行父类中的static变量的赋值语句和static代码块;
父类的实例成员和实例初始化;
执行父类的构造方法;
子类的实例成员和实例初始化;
子类构造方法。
原文:https://www.cnblogs.com/lightning1992/p/11749203.html