java 静态代码块、构造代码块、构造函数调用顺序

检验一下java的静态代码块、构造代码块、构造函数的调用顺序问题。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;
    }

}

子类this

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;
    }

}

父类运行结果图:spa

 

结论,静态代码块 > 构造代码块 > 构造函数code

子类运行结果图:blog

 

结论,父静态 > 子静态 > 父构造代码块 > 父构造函数 > 子构造代码块 > 子构造函数get

简单点记录就是 静态  > 父类 > 子类class