Java面试题:继承下类初始化顺序详解

需积分: 10 1 下载量 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,并能有效地编写和调试代码。