面试题答案
一键面试- 初始化顺序:
- 父类静态变量和静态代码块(按在代码中出现的顺序初始化)
- 子类静态变量和静态代码块(按在代码中出现的顺序初始化)
- 父类实例变量和实例代码块(按在代码中出现的顺序初始化)
- 父类构造函数
- 子类实例变量和实例代码块(按在代码中出现的顺序初始化)
- 子类构造函数
- 举例说明:
class Parent {
// 父类静态变量
static int parentStaticVar = parentStaticMethod();
// 父类静态代码块
static {
System.out.println("Parent static block");
}
// 父类实例变量
int parentInstanceVar = parentInstanceMethod();
// 父类实例代码块
{
System.out.println("Parent instance block");
}
// 父类构造函数
Parent() {
System.out.println("Parent constructor");
}
static int parentStaticMethod() {
System.out.println("Parent static method for static var initialization");
return 1;
}
int parentInstanceMethod() {
System.out.println("Parent instance method for instance var initialization");
return 2;
}
}
class Child extends Parent {
// 子类静态变量
static int childStaticVar = childStaticMethod();
// 子类静态代码块
static {
System.out.println("Child static block");
}
// 子类实例变量
int childInstanceVar = childInstanceMethod();
// 子类实例代码块
{
System.out.println("Child instance block");
}
// 子类构造函数
Child() {
System.out.println("Child constructor");
}
static int childStaticMethod() {
System.out.println("Child static method for static var initialization");
return 3;
}
int childInstanceMethod() {
System.out.println("Child instance method for instance var initialization");
return 4;
}
}
public class InitializationOrderDemo {
public static void main(String[] args) {
Child child = new Child();
}
}
在上述代码中,当运行InitializationOrderDemo
的main
方法创建Child
对象时,输出结果如下:
Parent static method for static var initialization
Parent static block
Child static method for static var initialization
Child static block
Parent instance method for instance var initialization
Parent instance block
Parent constructor
Child instance method for instance var initialization
Child instance block
Child constructor
此输出结果体现了上述的初始化顺序。