看think in java 7.9.1继承的初始化过程的例子,并没有讲到static 代码块的初始化顺序
类在初次使用的时候才会被加载,static代码会在加载的时候初始化,所以一个类按照先加载static变量—>static 代码块->普通变量->构造器代码 的顺序进行初始化
而出现继承的时候,类的初始化顺序如下
1.父类的static 变量
2.父类的static 代码块
3.子类的static 变量
4.子类的static 代码块
5.父类的变量
6 父类的构造器
7 子类的变量
8.子类的构造器
写个demo验证下
public class TestExtends extends Base{ private static String x21=print("x21"); private String x22=print("x22"); public TestExtends() { print("x2"); } static { print("x23"); } public static void main(String[] args) { new TestExtends(); } } class Base { private static String x11=print("x11"); private String x12=print("x12"); public Base() { print("x1"); } static { print("x13"); } protected static String print(String s) { System.out.println(s); return s; } }
结果如下