Java初始化顺序

1  无继承情况下的Java初始化顺序:

Java初始化顺序_第1张图片

输出结果为:

Java初始化顺序_第2张图片

由此可以得出结论:

a静态成员变量首先初始化(注意,Static可以看做一个静态成员,其执行顺序和其在类中申明的顺序有关)

b 普通成员初始化

c 执行构造函数。

对于静态成员(static块可以看成普通的一个静态成员,其并不一定在类初始化时首先执行)和普通成员,其初始化顺序只与其在类定义中的顺序有关,和其他因素无关。

例如下面的例子:

Java初始化顺序_第3张图片

运行结果为

Java初始化顺序_第4张图片

static 块 1  执行

静态成员staticSam1初始化

静态成员staticSam2初始化

static 块 2  执行

--------静态成员

sam1成员初始化

sam2成员初始化

--------普通成员

Test默认构造函数被调用

--------构造函数

2 Java继承情况下的初始化顺序:

Java初始化顺序_第5张图片

运行结果:

Java初始化顺序_第6张图片


父类 static 块 1  执行

父类 静态成员staticSam1初始化

父类 静态成员staticSam2初始化

父类 static 块 2  执行

--------父类静态成员初始化

子类 静态成员staticSamSub初始化

子类 静态成员staticSamSub1初始化

子类 static 块  执行

-------子类静态成员初始化

父类 sam1成员初始化

父类 sam2成员初始化

父类 Test默认构造函数被调用

-------父类普通成员初始化和构造函数执行

子类 sam1成员初始化

子类 sam2成员初始化

子类 TestSub 默认构造函数被调用

-------父类普通成员初始化和构造函数执行

由此得出Java初始化顺序结论:

1 继承体系的所有静态成员初始化(先父类,后子类)

2 父类初始化完成(普通成员的初始化-->构造函数的调用)

3 子类初始化(普通成员-->构造函数)

Java初始化顺序_第7张图片

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