Java面试题解惑:继承下类初始化顺序详解
需积分: 10 65 浏览量
更新于2024-12-20
收藏 573KB PDF 举报
"JAVA面试题解惑系列主要探讨了类的初始化顺序在Java编程中的重要性,尤其是在继承关系中的理解。面试者经常被问及关于两个继承类的实例,其中包含构造器、变量、静态变量和初始化块的执行顺序问题。常规来说,类的初始化顺序遵循以下规则:1) 静态变量和静态初始化块;2) 变量和初始化块;3) 构造器。
在单一类中,这段顺序是明确的,但当涉及继承时,情况稍微复杂。继承中的子类会先执行其自身的静态初始化块,然后是父类的静态初始化块(如果存在),接着是子类的变量和初始化块,最后是子类的构造器。这是因为子类构造器会先调用父类的构造器,此时父类的静态成员已经初始化完毕。具体示例代码证实了这一顺序:
```java
public class Parent {
public static String p_StaticField = "父类--静态变量";
public String p_Field = "父类--变量";
static {
System.out.println(p_StaticField);
System.out.println("父类静态初始化块");
}
{
System.out.println(p_Field);
System.out.println("父类初始化块");
}
public Parent() {
System.out.println("父类构造器");
}
}
public class Child extends Parent {
public static String c_StaticField = "子类--静态变量";
public String c_Field = "子类--变量";
static {
System.out.println(c_StaticField);
System.out.println("子类静态初始化块");
}
{
System.out.println(c_Field);
System.out.println("子类初始化块");
}
public Child() {
System.out.println("子类构造器");
}
}
public static void main(String[] args) {
new Child();
}
```
运行这段代码,输出顺序可能会包括父类的静态变量、父类的静态初始化块、子类的静态变量、子类的静态初始化块、子类的变量、子类的初始化块,以及子类的构造器。理解这个顺序对于正确编写和调试代码,以及理解面试题目中的逻辑至关重要。记住,类的初始化顺序并非随意的,而是由Java语言规范严格规定,面试时需熟练掌握。"
点击了解资源详情
点击了解资源详情
点击了解资源详情
2011-12-08 上传
2010-03-15 上传
2013-01-05 上传
2022-07-14 上传
2023-04-25 上传
2021-10-30 上传
lsj0805366
- 粉丝: 1
- 资源: 22