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