Java面试题:继承下类初始化顺序详解
需积分: 10 101 浏览量
更新于2024-12-24
收藏 573KB PDF 举报
Java面试题解惑是2009年经典内容,主要关注于类的初始化顺序在Java中的理解和应用。在面试中,面试官可能会考察继承关系中不同成员的初始化顺序,这对于理解类的行为至关重要。类的初始化遵循特定的顺序,包括:
1. 静态变量和静态初始化块: 这些在整个类加载时被初始化,无论是否创建类的实例。例如,"静态变量staticField" 和 "父类--静态变量p_StaticField"。
2. 变量和初始化块: 在类的实例化过程中,先初始化变量,再执行初始化块(实例初始化块)。如 "public String field" 和 "父类--变量p_Field"。
3. 构造器: 当创建类的新实例时,构造器会被调用。"构造器" 方法会在变量和初始化块之后执行。
针对继承情况,子类会继承父类的静态变量和静态初始化块,但子类的实例变量和初始化块、构造器会遵循相同的顺序。为了验证这一顺序,面试者可能会提供一个测试用例,如:
```java
class Parent {
// 父类静态变量
public static String p_StaticField = "父类--静态变量";
// 父类变量
public String p_Field = "父类--变量";
// 父类静态初始化块
static {
System.out.println(p_StaticField);
System.out.println("父类静态初始化块");
}
// 父类构造器
public Parent() {
System.out.println("父类构造器");
}
}
class Child extends Parent {
// 子类变量
public String c_Field = "子类--变量";
// 子类初始化块
{
System.out.println(c_Field);
System.out.println("子类初始化块");
}
// 子类构造器
public Child() {
System.out.println("子类构造器");
}
}
public class Main {
public static void main(String[] args) {
// 创建子类实例,触发初始化顺序
new Child();
}
}
```
运行这段代码时,输出会按照以下顺序进行:
1. 父类静态变量
2. 父类静态初始化块
3. 子类变量(c_Field)
4. 子类初始化块
5. 父类构造器
6. 子类构造器
总结来说,面试者可能期望应聘者理解并能够准确地解释这个顺序,特别是在面对复杂的继承结构时,如何确保变量的正确初始化和执行顺序。掌握这种概念有助于避免潜在的bug,并能有效地编写和调试代码。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2011-04-07 上传
2010-11-02 上传
点击了解资源详情
2024-12-24 上传
2024-12-24 上传
Forrest-ajun
- 粉丝: 11
- 资源: 10
最新资源
- coursera:Coursera资料库
- 行业分类-设备装置-可连接到提供可区分振铃模式服务的转接网络的通信装置.zip
- 砂光0519.zip西门子PLC编程实例程序源码下载
- mtm6302-midterm
- get_evi
- doctors-portal
- 软件安装文件自解压源码-易语言
- Learning-Notes
- checkers:英文跳棋引擎
- 行业分类-设备装置-可编程高速差分接口.zip
- Bonfire-SL1-Rules
- 项目跟踪器后端
- restapi_restassured
- blog4share.github.io
- korneliaklopecka.github.io
- 行业分类-设备装置-可移动升降操作平台.zip