java对象初始化顺序为:先静态后实例、先父类后子类、先变量后构造方法;静态部分在类加载时执行一次,实例部分在new时按父类变量→父类块→父类构造器→子类变量→子类块→子类构造器顺序执行。

Java 中对象的初始化顺序是明确且固定的,理解它对排查构造异常、理解继承行为和静态资源加载非常关键。核心原则是:先静态后实例、先父类后子类、先变量后构造方法。
静态成员优先初始化(类加载时执行一次)
静态变量和静态代码块在类第一次被加载(如首次 new 实例、调用静态方法、访问静态字段等)时执行,且只执行一次。父类静态内容先于子类执行。
- 父类静态变量赋值 → 父类静态代码块
- 子类静态变量赋值 → 子类静态代码块
实例创建时:先父类后子类,先变量再构造器
当执行 new Son() 时,JVM 按以下顺序触发非静态部分:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 父类普通成员变量赋值(含默认值或显式初始化)
- 父类实例初始化块(按代码出现顺序)
- 父类构造方法(若未显式调用 super(),则隐式调用无参 super())
- 子类普通成员变量赋值
- 子类实例初始化块
- 子类构造方法
注意 super() 和 this() 的位置影响
构造方法第一行必须是 super(...) 或 this(...)(显式或隐式)。一旦写了显式的 super(),就不会再插入隐式 super();但若子类构造器没写任何 super() 或 this(),编译器自动插入 super()(调用父类无参构造器)。如果父类没有无参构造器,又没在子类中显式调用合适的 super(...),就会编译失败。
一个典型执行顺序示例
假设定义了 Parent 和 Child 类(Child extends Parent),执行 new Child() 时完整顺序为:
- Parent 静态变量 → Parent 静态块
- Child 静态变量 → Child 静态块
- Parent 普通变量 → Parent 实例块 → Parent 构造器
- Child 普通变量 → Child 实例块 → Child 构造器
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










