Java程序中初始化的顺序是怎么样的
在Java语言中,当实例化对象时,对象所在类的所有成员变量首先要进行初始化,只有当所有类成员完成初始化后,才会调用对象 所在类的构造函数创建对象。
Java程序的初始化一般会遵循3个原则:1.静态对象(变量)优先于非静态对象(变量)初始化,其中,静态对象(变量)只初始化一次,而非静态可能会初始化多次2.父类优先于子类进行初始化3.按照成员变量的定义顺序进行初始化。即使它们定义在任何方法(构造函数)中被调用之前先初始化。
Java中初始化的顺序一般为:父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量、父类非静态代码块、父类构造函数、子类非静态变量、子类非静态代码块、子类构造函数。
下面我们看不同模块初始化时执行顺序(验证):
//定义一个父类
public class Fu {
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类代码块");
}
public Fu() {
System.out.println("父类构造函数");
}
}
//定义一个子类
public class Zi extends Fu{
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类代码块");
}
public Zi() {
System.out.println("子类构造函数");
}
public static void main(String[] args) {
Zi zi=new Zi();
}
}
结果:
父类静态代码块
子类静态代码块
父类代码块
父类构造函数
子类代码块
子类构造函数