一个对象的初始化过程从其父类开始:
class SuperClass {
// static member
static Process staticMember = new Process("[super] static member");
// common member
Process commonMember = new Process("[super] common member");
// static initialize block
static {
System.out.println("[super] static initialize block");
}
// initialize block
{
System.out.println("[super] initialize block");
}
// common constructor
public SuperClass() {
System.out.println("[super] constructor");
}
}
class ChildClass extends SuperClass {
static Process childStaticMember = new Process("[child] static member");
Process childCommonMember = new Process("[child] common member");
static {
System.out.println("[child] static initialize block");
}
{
System.out.println("[child] initialize block");
}
public ChildClass() {
System.out.println("[child] constructor");
}
}
class Process {
Process(String process) {
System.out.println(process);
}
// main
public static void main(String[] args) {
new ChildClass();
}
}
运行后输入:
[super] static member
[super] static initialize block
[child] static member
[child] static initialize block
[super] common member
[super] initialize block
[super] constructor
[child] common member
[child] initialize block
[child] constructor
一个对象的初始化过程可以得出如下顺序:
- 父类静态成员变量初始化
- 父类静态代码块
- 对象静态成员变量初始化
- 对象静态代码块
- 父类成员变量初始化
- 父类初始化块
- 父类构造函数
- 子类成员变量初始化
- 子类初始化块
- 子类构造函数