【一步一步了解Java】:子类继承以及代码块的初始化
public class Parent {
private int value;
{
// 父类代码块初始化
value = 10;
System.out.println("父类代码块初始化 value = " + value);
}
public Parent() {
// 父类构造器
System.out.println("父类构造器被调用");
}
}
public class Child extends Parent {
private int value;
{
// 子类代码块初始化
value = 20;
System.out.println("子类代码块初始化 value = " + value);
}
public Child() {
// 子类构造器
System.out.println("子类构造器被调用");
}
}
// 测试代码
public class Test {
public static void main(String[] args) {
new Child();
}
}
当运行这段代码时,会发生以下初始化过程:
- 由于
Test
类中的main
方法创建了一个Child
类的实例,JVM开始加载Child
类。 - 在加载
Child
类的过程中,JVM发现它有一个基类Parent
,于是继续加载Parent
类。 - 当两个类都加载完成后,JVM开始执行父类的初始化代码块(如果有的话)。这是在构造器执行之前进行的,所以会首先打印出"父类代码块初始化 value = 10"。
- 父类初始化完成后,JVM开始执行子类的初始化代码块,打印出"子类代码块初始化 value = 20"。
- 最后,JVM开始执行子类的构造器,打印出"子类构造器被调用"。
这个过程展示了类初始化块的执行顺序,即在构造器执行之前,先执行初始化块(如果有的话)。这对于理解类的初始化顺序是重要的。
评论已关闭