继承中类初始化顺序

时间:2021-03-23 19:42:19

       在继承体系中,父子类的初始化存在先后顺序,涉及父子类中都存在静态变量、静态代码块、普通变量、普通代码块、构造函数

       其初始化流程图如下:

          继承中类初始化顺序

      注:变量和代码块的执行顺序依据代码编写的先后顺序。

 

        以下以代码举例说明,有图有代码有真相,呵呵。

      父类:

 

public class Parent{
private static final String parentStaticStr="初始化父类Static变量";

static {
System.out.println(parentStaticStr);
System.out.println("初始化父类Static代码块");
}

private String parentStr="初始化父类普通变量";

{
System.out.println(parentStr);
System.out.println("初始化父类普通代码块");
}

public Parent(){
System.out.println("初始化父类构造函数");
}
}

       子类:

public class Child extends Parent{
private static final String childStaticStr="初始化子类Static变量";

static {
System.out.println(childStaticStr);
System.out.println("初始化子类Static代码块");
}

private String childStr="初始化子类普通变量";

{
System.out.println(childStr);
System.out.println("初始化子类普通代码块");
}

public Child(){
System.out.println("初始化子类构造函数");
}
}


 

      执行:

public class InitOrderTest {

public static void main(String []args){
Child child=new Child();
}
}


 

     执行结果:

     继承中类初始化顺序