Java程序的初始化顺序
在Java语言中,当实例化对象的时候,对象所在类的所有成员变量首先要进行初始化,当所有类成员完成初始化之后才会调用对象所在类的构造方法来创建对象.
Java程序的初始化流程一般遵循三个准则:
- 静态对象,变量优先于非静态对象,变量的初始化,其中静态对象或者变量只初始化一次,而非静态的可能会初始化多次
- 父类优先于子类
- 成员变量按照定义的顺序进行初始化
实际的使用中Java代码中可能存在代码块,有静态代码块和非静态代码块,加上代码块,他们执行的流程如下:
流程都在图上,就不再叙述一遍了,下面直接看一个例子:
public class InitBase {
static {
System.out.println("Base static block");
}
{
System.out.println("Base block");
}
public InitBase() {
System.out.println("Base constructor");
}
}
public class InitTest extends InitBase {
static {
System.out.println("Derived static block");
}
{
System.out.println("Derived block");
}
public InitTest() {
System.out.println("Derived constructor");
}
public static void main(String[] args) {
new InitTest();
}
}
输出结果:
Base static block
Derived static block
Base block
Base constructor
Derived block
Derived constructor
完毕.