静态代码块先于构造方法执行:静态代码块在类加载时执行且仅一次,构造方法在每次new对象时执行,位于实例代码块之后;多类继承时按父类静态块→子类静态块→父类实例块→父类构造器→子类实例块→子类构造器顺序执行。

Java 中 static 静态代码块和构造方法的执行顺序有本质区别:静态代码块属于类级别,在类加载时执行,且只执行一次;构造方法属于实例级别,在每次 new 对象时执行,且总在静态代码块之后、实例代码块之后才运行。
简单说,不是“谁先写谁先执行”,而是由它们所处的生命周期阶段决定——类还没用,静态代码块就已跑完;对象没诞生,构造方法根本不会触发。
静态代码块:类加载即执行,仅一次
- JVM 第一次主动使用该类(如 new 实例、调用静态方法、访问静态字段)时,触发类加载流程,静态代码块随之执行。
- 同一个类中多个
static{}按定义顺序依次执行。 - 它不能访问任何非静态成员(比如普通字段或方法),因为此时还没有任何对象存在。
- 常见用途:初始化
public static final常量、注册驱动、预热缓存、读取全局配置。
构造方法:对象创建时执行,每次 new 都走一遍
- 每次调用
new Xxx()时,JVM 先完成实例代码块(如果有),再进入构造方法体。 - 即使构造方法里写了
this(...)调用本类其他构造器,实例代码块也只执行一次(在最终被选中的那个构造器入口前)。 - 构造方法可访问所有成员(静态 + 实例),适合做参数校验、资源分配、状态赋值等对象专属初始化逻辑。
- 若没显式写
super()或this(),编译器自动插入super(),从而确保父类构造逻辑先于子类执行。
多个类继承时的完整链条(以 new Child() 为例)
- 先触发
Parent类加载 → 执行Parent静态代码块 - 再触发
Child类加载 → 执行Child静态代码块 - 开始创建对象:执行
Parent实例代码块 →Parent构造方法 - 然后执行
Child实例代码块 →Child构造方法
这个顺序稳定、可预测,不依赖代码书写位置,只取决于类加载时机和对象初始化流程。
不复杂但容易忽略
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











