对于Java对象的初始化过程,可以分为三个步骤:成员变量的初始化、代码块的初始化和构造器的初始化。这三个步骤的执行顺序如下:
- 父类的成员变量初始化。
- 父类的静态代码块初始化。
- 子类的成员变量初始化。
- 子类的静态代码块初始化。
- 父类的代码块初始化。
- 父类的构造器初始化。
- 子类的代码块初始化。
- 子类的构造器初始化。
其中,静态代码块是在类加载时执行,只会执行一次,而普通代码块和构造器是在对象的创建过程中执行的。
下面通过两个示例说明Java对象初始化过程中代码块和构造器的调用顺序:
示例1:
public class Test {
static {
System.out.println("静态代码块");
}
{
System.out.println("代码块");
}
public Test() {
System.out.println("构造器");
}
public static void main(String[] args) {
new Test();
}
}
执行上面的代码,输出结果如下:
静态代码块
代码块
构造器
可以看到,静态代码块先于所有代码块和构造器执行,代码块在构造器之前执行。
示例2:
public class Father {
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类代码块");
}
public Father() {
System.out.println("父类构造器");
}
}
public class Son extends Father {
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类代码块");
}
public Son() {
System.out.println("子类构造器");
}
public static void main(String[] args) {
new Son();
}
}
执行上面的代码,输出结果如下:
父类静态代码块
子类静态代码块
父类代码块
父类构造器
子类代码块
子类构造器
可以看到,父类的静态代码块和父类的构造器先于子类的代码块和子类的构造器执行。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java对象初始化过程代码块和构造器的调用顺序 - Python技术站