成员变量、静态代码块、非静态代码块、构造器的初始化顺序

首先说结论吧

静态成员变量->父类静态代码块->子类静态成员变量->子类静态代码块->父类成员变量->父类非静态代码快->父类构造器->子类成员变量->子类非静态代码块->子类构造器

具体例子可以看如下示例

public class TestFuZi {
    public static void main(String[] args) {
        Zi z=new Zi();
    }
}
class Fu{
    private static int i=getNum("(1)i");
    private int j=getNum("(2)j");
    static {
        print("(3)父类静态代码块");
    }
    {
        print("父类非静态代码块,又称为构造代码块");
    }
    Fu(){
        print("(5)父类构造代码块");
    }
    public static void print(String str){
        System.out.println(str+"->"+i);
    }
    public static int getNum(String str){
        print(str);
        return ++i;
    }
}

class Zi extends Fu{
    private static int k=getNum("(6)k");
    private int h=getNum("(7)h");
    static {
        print("(8)子类静态代码块");
    }
    {
        print("(9)子类非静态代码块,又称为构造代码块");
    }
    Zi(){
        print("(10)子类构造器");
    }
    public static int getNum(String str){
        print(str);
        return ++k;
    }
}

该程序的输出结果是:

 

posted @ 2022-09-02 21:09  我吃大西瓜  阅读(31)  评论(0编辑  收藏  举报