Java代码块执行顺序为:静态代码块在类首次主动使用时执行一次,构造代码块每次new对象时在父类构造方法后、本类构造方法前执行,父子类遵循先父后子、先静后动规则。

Java 中的代码块执行顺序和对象初始化密切相关,理解它们的触发时机和优先级,是掌握类加载与实例创建过程的关键。
静态代码块:类加载时执行一次
静态代码块用 static { ... } 定义,属于类级别,在类第一次被加载进 JVM 时执行,且仅执行一次。它早于任何对象创建,常用于初始化静态变量或执行一次性类级准备工作。
- 多个静态代码块按定义顺序依次执行
- 即使不 new 对象,只要类被主动引用(如调用静态方法、访问静态字段),也会触发执行
- 不能访问非静态成员(因为此时实例尚未存在)
构造代码块:每次创建对象前执行
构造代码块用 { ... } 定义(无 static、无修饰符),属于实例级别。每次调用构造方法前,JVM 会先执行所有构造代码块(按定义顺序),再执行构造方法体中的语句。
- 作用类似“前置初始化逻辑”,可减少多个构造器中重复代码
- 可访问实例变量和方法(因为此时对象已分配内存,但尚未完成初始化)
- 比构造方法先执行,但晚于静态代码块
构造方法:对象初始化的核心环节
构造方法在 new 表达式执行时被调用,负责设置对象初始状态。它的执行顺序固定在构造代码块之后:
- 若存在父类,先执行父类的静态代码块 → 父类构造代码块 → 父类构造方法
- 再执行子类的静态代码块(若首次加载)→ 子类构造代码块 → 子类构造方法
- 注意:this(...) 或 super(...) 必须是构造方法的第一条语句,会隐式或显式决定调用链起点
执行顺序总结(以 new Son() 为例)
假设 Son 继承自 Father,且都含静态代码块、构造代码块和构造方法:
- Father 的静态代码块(类加载时)
- Son 的静态代码块(类加载时,若 Son 尚未加载)
- Father 的构造代码块
- Father 的构造方法
- Son 的构造代码块
- Son 的构造方法
这个顺序由 JVM 规范保证,不受代码书写位置影响,只取决于类继承关系和是否首次加载。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











