1,当实例化对象时,对象所在类的所有成员变量首先完成初始化,当所有类成员初始化完成后,才会调用对象所在类的构造函数创建对象
2,java初始化一般遵循三个原则:
①静态对象(变量)一般优先于非静态对象(变量)初始化,静态对象只初始化一次,非静态对象可能被初始化多次。
②父类优先于子类经行初始化
③按照成员变量的定义顺序进行初始化,即使变量定义散布在方法定义中,它们依然在任何方法(包括构造函数)被调用之前初始化。
3,java初始化工作可以在许多不同的代码块中来完成。它们的执行顺序如下:
父类的静态变量—>父类的静态代码块—>子类静态变量—>子类的静态代码块---->父类的非静态变量---->父类的非静态方法---->父类的构造函数—>子类的非静态变量—>子类的非静态代码块—>子类的构造函数
例:
class B extends Object{
static{
System.out.println("A");
}
public B(){
System.out.println("B");
}
static{
System.out.println("C");
}
}
class A extends B{
static{
System.out.println("D");
}
public A(){
System.out.println("E");
}
static{
System.out.println("F");
}
}
执行顺序为:
A C D F B E