java初始化顺序
基本顺序为:
1 继承体系的所有静态成员初始化(先父类,后子类)
2 父类初始化完成(普通成员的初始化-->构造函数的调用)
3 子类初始化(普通成员-->构造函数)
Java初始化顺序如图:
实例代码:
package initialization; public class TestInit { // 主函数 public static void main(String str[]) { System.out.println("无继承情况下初始化顺序:"); new Test(); System.out.println("\n带有继承情况下初始化顺序:"); new TestSub(); } } class Sample { Sample(String s) { System.out.println(s); } Sample() { System.out.println("Sample默认构造函数被调用"); } } class Test { static Sample sam = new Sample("静态成员sam初始化"); Sample sam1 = new Sample("sam1成员初始化"); static { System.out.println("static块执行"); if (sam == null) System.out.println("sam is null"); sam = new Sample("静态块内初始化sam成员变量"); } Test() { System.out.println("Test默认构造函数被调用"); } } class TestSub extends Test { static Sample staticSamSub=new Sample("子类 静态成员staticSamSub初始化"); TestSub() { System.out.println("子类 TestSub 默认构造函数被调用"); } Sample sam1=new Sample("子类 sam1成员初始化"); static Sample staticSamSub1=new Sample("子类 静态成员staticSamSub1初始化"); static{System.out.println("子类 static 块 执行");} Sample sam2=new Sample("子类 sam2成员初始化"); } /* 输出结果: 无继承情况下初始化顺序: 静态成员sam初始化 static块执行 静态块内初始化sam成员变量 sam1成员初始化 Test默认构造函数被调用 带有继承情况下初始化顺序: 子类 静态成员staticSamSub初始化 子类 静态成员staticSamSub1初始化 子类 static 块 执行 sam1成员初始化 Test默认构造函数被调用 子类 sam1成员初始化 子类 sam2成员初始化 子类 TestSub 默认构造函数被调用 */