读书人

Java中种的初始化顺序

发布时间: 2012-12-18 12:43:41 作者: rapoo

Java中类的初始化顺序

?当我们使用new创建一个对象的时候,这个对象会在类的继承体系中按以下顺序执行初始化:

1.初始化父类的静态变量和静态代码块,按它们在代码中定义的顺序执行(先定义先执行);

2.初始化子类的静态变量和静态代码块,按它们在代码中定义的顺序执行(先定义先执行);

3.初始化父类的实例变量和实例代码块,按它们在代码中定义的顺序执行(先定义先执行);

4.执行父类的构造方法;

5.初始化子类的实例变量和实例代码块,按它们在代码中定义的顺序执行(先定义先执行);

6.执行子类的构造方法。

当该类存在多层次的继承体系时,则按以上顺序递归地执行初始化。

/** * 父类 */class SuperClass{//父类的静态代码块static{System.out.println("Initalizing static block in SuperClass\n");}//父类的实例代码块{System.out.println("Initalizing instance block in SuperClass\n");}//父类的静态变量public static Var StaticSuperVar = new Var("static variable in SuperClass");//父类的实例代变量public Var superVar = new Var("variable in SuperClass");//父类的构造方法public SuperClass(){System.out.println("Initalizing SuperClass\n");}}/** * 子类 */class SubClass extends SuperClass{//子类的静态变量public static Var StaticSubVar = new Var("static variable in SubClass");//子类的实例变量public Var subVar = new Var("variable in SubClass");//子类的静态代码块static{System.out.println("Initalizing static block in SubClass\n");}//子类的实例代码块{System.out.println("Initalizing instance block in SubClass\n");}//子类的构造方法public SubClass(){System.out.println("Initalizing SubClass\n");}}/** * 辅助类 */class Var{public Var(String name){System.out.println("Initalizing " + name + "\n");}}/** * 测试类 */public class InitOrderTest{public static void main(String[] args){SubClass subClass = new SubClass();}}
?

运行结果:

Initalizing static block in SuperClassInitalizing static variable in SuperClassInitalizing static variable in SubClassInitalizing static block in SubClassInitalizing instance block in SuperClassInitalizing variable in SuperClassInitalizing SuperClassInitalizing variable in SubClassInitalizing instance block in SubClassInitalizing SubClass
?

?

?

?

?

?

读书人网 >编程

热点推荐