首页 > 代码库 > java初始化顺序

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 默认构造函数被调用*/