父类静态代码块 → 子类静态代码块 → 父类非静态代码块 → 父类构造函数 → 子类非静态代码块 → 子类构造函数
java
class Animal {
static {
System.out.println("父类静态代码块");
}
{
System.out.println("父类非静态代码块");
}
public Animal() {
System.out.println("父类构造函数");
}
}
class Dog extends Animal {
static {
System.out.println("子类静态代码块");
}
{
System.out.println("子类非静态代码块");
}
public Dog() {
System.out.println("子类构造方法");
}
}
public class Main {
public static void main(String[] args) {
new Dog();
}
}
执行输出:
父类静态代码块
子类静态代码块
父类非静态代码块
父类构造函数
子类非静态代码块
子类构造方法
关键说明:
- 静态代码块 (
static { })在类加载时执行(只执行一次),先父类后子类 - 非静态代码块 (
{ })在对象创建时执行(每次创建对象都会执行),先父类后子类 - 构造函数在非静态代码块之后执行,同样先父类后子类