继承中的初始化顺序
2017-12-05 15:41
148 查看
作者:叁念
1.类初始化顺序:
在jvm装载类的阶段,首先为类的所有类属性和类初始化块分配内存空间
并在类的首次初始化阶段中对其进行初始化
类属性和类初始化块定义时的顺序决定了初始化顺序
若类存在父类,则首先初始化父类的类属性和类初始化。
2.对象初始化顺序:
在new创建对象时,首先对对象的属性和初始化块分配内存,并执行默认初始化
若存在父类,则先为父类对象属性和初始化块分配内存并进行初始化
然后执行父类构造器中的初始化程序,接着才开始对子类的对象属性和初始化块进行初始化
请看以下代码片段:
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类"); } }
相关文章推荐
- java继承 初始化顺序
- c++类多重继承初始化顺序
- 类继承和初始化类的执行顺序
- 【深入理解JVM】:Java类继承关系中的初始化顺序
- 【深入理解JVM】:Java类继承关系中的初始化顺序
- Java类继承关系中的初始化顺序
- java 继承 及 初始化顺序
- Java初始化总结【6、涉及到继承时 初始化顺序!!!!!】
- 继承中类初始化顺序
- C++ Primer Plus学习笔记之继承类的初始化顺序
- Java类继承关系中的初始化顺序
- 基类,继承类的初始化顺序
- C# 面向对象之继承后初始化顺序
- Java类继承关系中的初始化顺序
- 继承类各成员和方法的初始化顺序_05
- Java继承和初始化顺序
- java中继承期间父子类型的初始化顺序以及重写方法的调用规则
- Java第11次作业:什么是继承?继承的好处?什么是覆写?super()?构造代码块?子父类初始化顺序? 抽象类能用final声明吗?final关键字声明类 方法 变量以及全局常量?抽象类的构造方法?
- 复习一下Java中继承关系的类的初始化顺序
- 继承关系中,子类父类的初始化顺序