java 中静态块、构造块、构造器执行顺序

有如下代码块

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();

结果会如何呢?

这里不给具体结果,只给具体结论,如果是第一个实例化则有继承关系的类执行顺序为:

  1. 先执行父类的静态块  , 因为加载子类必须先加载父类
  2. 再继承类的静态块    
  3. 再父类动态(构造)块
  4. 父类构造器   java规范
  5. 子类的动态(构造)块
  6. 子类构造器
  7. 在上述中如果有相同级别的多段代码块,则按照代码的顺序执行。比如一个类中有几个静态块,则先执行前边的。

猜你喜欢

转载自blog.csdn.net/zhuzg2005/article/details/84678387
今日推荐