在多个子类继承的情况下,初始化的顺序如下:
静态变量和静态代码块按照在类中出现的先后顺序进行初始化,注意静态变量要在静态代码块之前初始化。
非静态代码块按照在类中出现的先后顺序进行初始化。
构造方法在最后执行。
举个例子:
class A {
static int x = 10; // 静态变量
static { // 静态代码块
System.out.println("静态代码块 A");
}
{ // 非静态代码块
System.out.println("非静态代码块 A");
}
A() { // 构造方法
System.out.println("构造方法 A");
}
}
class B extends A {
static int y = 20; // 静态变量
static { // 静态代码块
System.out.println("静态代码块 B");
}
{ // 非静态代码块
System.out.println("非静态代码块 B");
}
B() { // 构造方法
System.out.println("构造方法 B");
}
}
class C extends B {
static int z = 30; // 静态变量
static { // 静态代码块
System.out.println("静态代码块 C");
}
{ // 非静态代码块
System.out.println("非静态代码块 C");
}
C() { // 构造方法
System.out.println("构造方法 C");
}
}
public class Main {
public static void main(String[] args) {
C c = new C(); // 创建 C 类的对象
}
}
输出