有如下代码块
class MyOrderCls{ { System.out.println("1111"); } static { System.out.println("222"); } public MyOrderCls() { System.out.println(" 父类的构造器 EEEE"); } }
/**
继承关系。。
*/
class MyOrderClsChild extends MyOrderCls{ { System.out.println(" MyOrderClsChild AAAA 。。");} static { System.out.println(" MyOrderClsChild BBB .."); } public MyOrderClsChild() { //super(); System.out.println(" MyOrderClsChild 构造器...."); } }
在现在执行如下代码
MyOrderCls myOrderCls = new MyOrderClsChild();
结果会如何呢?
这里不给具体结果,只给具体结论,如果是第一个实例化则有继承关系的类执行顺序为:
- 先执行父类的静态块 , 因为加载子类必须先加载父类
- 再继承类的静态块
- 再父类动态(构造)块
- 父类构造器 java规范
- 子类的动态(构造)块
- 子类构造器
- 在上述中如果有相同级别的多段代码块,则按照代码的顺序执行。比如一个类中有几个静态块,则先执行前边的。