Java程序初始化顺序

Java程序初始化顺序

首先来看一段代码

class a{
    static b b1 = new b();
    static{
        System.out.println("1");
    }
    a(){
        System.out.println("2");
    }
}
public class b extends a{
    static{
        System.out.println("3");
    }

    b(){
        System.out.println("4");
    }
    public static void main(String[] args) {
        System.out.println("====");
        b b = new b();
    }
}

输出顺序应该是什么样的呢?

2
4
1
3
====
2
4
Java程序初始化顺序.png

根据上图可知:在程序初始化时,先会初始化父类中的静态变量和静态的代码块。然后再是子类中的静态变量和静态代码块。
然后在创建对象的时候,会先调用父类的构造函数(默认调用super()函数)

你可能感兴趣的:(Java程序初始化顺序)