您的位置:首页 > 其它

继承中的初始化顺序

2017-12-05 15:41 148 查看
作者:叁念

1.类初始化顺序:

在jvm装载类的阶段,首先为类的所有类属性和类初始化块分配内存空间

并在类的首次初始化阶段中对其进行初始化

类属性和类初始化块定义时的顺序决定了初始化顺序

若类存在父类,则首先初始化父类的类属性和类初始化。

2.对象初始化顺序:

在new创建对象时,首先对对象的属性和初始化块分配内存,并执行默认初始化

若存在父类,则先为父类对象属性和初始化块分配内存并进行初始化

然后执行父类构造器中的初始化程序,接着才开始对子类的对象属性和初始化块进行初始化

请看以下代码片段:

import java.util.Calendar;

public class Test {
public static void main(String[] args) {
new A(); // 输出:构造了D类    构造了A类

new B(); // 输出:构造了D类    构造了A类 构造了B类

new C(); // 输出:构造了D类    构造了A类 构造了B类 构造了C类
}

}

class A {

private D d = new D();

public A() {
System.out.println("构造了A类");
}
}

class B extends A {
public B() {
System.out.println("构造了B类");
}

}

class C extends B {
public C() {
System.out.println("构造了C类");
}
}

class D {
public D() {
System.out.println("构造了D类");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: