在创建派生类对象时,构造函数的执行顺序是什么?
对象创建时代码的执行顺序为:静态代码块 --> 构造代码块 --> 构造方法代码块。
注意:若继承了父类,则执行顺序为:父类的静态代码代码块 --> 子类的静态代码块 --> 父类构造代码块 --> 父类构造方法代码块 --> 子类构造代码块 --> 子类构造方法代码块。
静态代码包括(静态方法,静态变量,静态代码块等),非静态代码即(成员方法,成员变量,成员代码块等),代码块里面按顺序执行。
可能难以理解,请结合上面“注意”的地方,观察下方代码的执行顺序:
package cn.tedu.test5;
public class RunOrder {
public static void main(String[] args) {
A a = new B();
}
}
class A {
static {
System.out.println("A 基类的静态域 ");
}
{
System.out.println("A 基类对象成员的构造函数");
}
public A() {
System.out.println("A 基类本身的构造函数");
}
}
class B extends A {
static {
System.out.println("B 派生类的静态域");
}
{
System.out.println("B 派生类对象成员的构造函数");
}
public B() {
System.out.println("B 派生类本身的构造函数");
}
}
执行结果:
A 基类的静态域
B 派生类的静态域
A 基类对象成员的构造函数
A 基类本身的构造函数
B 派生类对象成员的构造函数
B 派生类本身的构造函数