Java面试题:类初始化顺序详解
需积分: 10 118 浏览量
更新于2024-12-16
收藏 573KB PDF 举报
"JAVA面试题解惑系列深入探讨类的初始化顺序"
在Java面试中,关于类的初始化顺序是一个常见的考察点,特别是在涉及继承关系时。理解这个知识点对于求职者来说至关重要,因为它直接影响到程序的行为和性能。类的初始化遵循一定的顺序规则,包括静态成员和实例成员的初始化。
首先,静态成员的初始化顺序为:
1. 静态变量(Static Field)
2. 静态初始化块(Static Initializer Block)
这意味着在类加载时,静态变量会被分配内存,并执行静态初始化块中的代码,这些代码只执行一次,不论创建多少个该类的实例。
接下来是实例成员的初始化顺序:
1. 实例变量(Instance Field)
2. 初始化块(Instance Initializer Block)
实例变量在创建类的实例时进行初始化,而初始化块则位于构造器内部,会在实例化时执行,每个实例对应一个初始化块的执行。
当类存在继承关系时,子类的初始化顺序如下:
- 先执行父类的静态成员初始化(包括静态变量和静态初始化块)
- 然后创建子类的对象时,执行父类的实例变量和初始化块
- 接着执行子类自身的实例变量和初始化块
- 最后执行子类的构造器
让我们通过下面的代码来演示这个过程:
```java
class Parent {
public static String p_StaticField = "父类--静态变量";
public String p_Field = "父类--变量"; // 静态初始化块
static {
System.out.println(p_StaticField);
}
// 初始化块
{
System.out.println(p_Field);
}
}
class Child extends Parent {
public static String c_StaticField = "子类--静态变量";
public String c_Field = "子类--变量"; // 初始化块
static {
System.out.println(c_StaticField);
}
// 子类构造器
public Child() {
System.out.println("子类构造器");
}
}
public class Main {
public static void main(String[] args) {
new Child(); // 创建子类对象
}
}
```
运行这段代码,你会看到以下输出顺序:
1. 父类的静态变量
2. 父类的静态初始化块
3. 父类的实例变量
4. 父类的初始化块
5. 子类的静态变量
6. 子类的静态初始化块
7. 子类的实例变量
8. 子类的初始化块
9. 子类的构造器
总结来说,类的初始化顺序在Java中是一个关键知识点,面试官可能会借此考察候选人的基础知识以及对面向对象编程的理解。确保掌握类的静态和实例成员的初始化顺序,以及在继承关系中如何正确处理,这对求职者的编程技能评估至关重要。
148 浏览量
155 浏览量
153 浏览量
150 浏览量
398 浏览量
437 浏览量
330 浏览量
191 浏览量
283 浏览量
wxxhxy
- 粉丝: 1
- 资源: 9