Java中类与对象初始化顺序为:先父类静态代码块、子类静态代码块,再父类实例代码块、父类构造器、子类实例代码块、子类构造器。

Java 中类与对象的初始化顺序是固定的,由 JVM 严格保证。理解这个顺序,关键在于分清 类加载阶段 和 实例创建阶段,以及其中三类代码块的执行时机:静态代码块、实例代码块、构造器。
静态代码块(类加载时执行,仅一次)
静态代码块在类第一次被主动使用(如 new 实例、调用静态方法、访问静态字段等)而触发类加载和初始化时执行,且只执行一次。它属于类级别,不依赖对象。
- 多个静态代码块按定义顺序从上到下执行
- 父类静态代码块先于子类执行(因为子类初始化前必须先初始化父类)
- 静态变量初始化语句(含赋值)与静态代码块同等地位,也按出现顺序执行
实例代码块(每次 new 对象时执行)
实例代码块在每次创建对象时执行,在构造器之前运行,属于对象级别。它会被“插入”到每个构造器的开头(编译后),所以无论调用哪个构造器,都会执行。
- 多个实例代码块按定义顺序从上到下执行
- 父类实例代码块先于子类执行(因为子类构造器隐式/显式调用 super())
- 实例变量初始化语句(含赋值)与实例代码块同级,也按出现顺序执行
构造器(对象创建的核心入口)
构造器在实例代码块之后执行。子类构造器第一行默认或显式调用父类构造器(super() 或 this()),从而形成完整的初始化链。
立即学习“Java免费学习笔记(深入)”;
- 父类构造器 → 子类构造器
- 如果子类构造器第一行是 this(...),则先执行本类另一个构造器(仍需最终调用 super)
- 构造器内可访问已初始化的实例变量和实例代码块结果
完整执行顺序示例(父子类)
以下代码执行 new Child() 时,输出顺序为:
Parent static block Child static block Parent instance block Parent constructor Child instance block Child constructor
说明:静态部分只在首次加载 Child 类时执行(同时触发 Parent 类初始化);后续 new 更多 Child 实例,只重复执行实例块 + 构造器部分。


















