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

}

子类

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

}

父类运行结果图:

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

子类运行结果图:

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

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

原创博文,未经许可不得转载,转载请注明出处。
原文地址:https://www.cnblogs.com/Think-007/p/7569818.html