检验一下java的静态代码块、构造代码块、构造函数的调用顺序问题。
父类
public class Father { private int tag = 1; public static String flag = "father"; public Father() { System.out.println("construct father"); } static { System.out.println("staic father block"); } { System.out.println("father block"); } public int getTag() { return tag; } public void setTag(int tag) { this.tag = tag; } }
子类
public class Sun extends Father{ private int tag = 10; public static String flag = "sun"; public Sun(){ System.out.println("construct sun"); } static { System.out.println("static sun block "); } { System.out.println("sun block"); } public int getTag() { return tag; } public void setTag(int tag) { this.tag = tag; } }
父类运行结果图:
结论,静态代码块 > 构造代码块 > 构造函数。
子类运行结果图:
结论,父静态 > 子静态 > 父构造代码块 > 父构造函数 > 子构造代码块 > 子构造函数
简单点记录就是 静态 > 父类 > 子类。