静态代码块先执行(类加载时一次),其次实例代码块(每次new时在构造方法前执行),最后构造方法(对象成型最后一环);父类总在子类之前执行,变量初始化与对应代码块同序。

掌握Java中静态代码块、实例代码块与构造方法的执行顺序,关键在于理解它们所处的生命周期阶段:类加载阶段 vs 对象创建阶段。不是靠死记,而是抓住“谁先被JVM看见、谁依赖谁”这个逻辑主线。
静态代码块:类一登场就执行,只一次
它属于类级别,JVM在首次主动使用该类(比如 new 对象、调用 static 方法、访问 static 字段)时触发类加载,此时立即执行所有静态代码块——按源码从上到下顺序,且整个程序运行期间仅此一次。
- 不能访问 this、普通字段或普通方法
- 适合做全局一次性操作:注册驱动、初始化静态缓存、读取配置文件
- 父类静态块一定先于子类静态块执行(因为子类加载前必须先确保父类已加载)
实例代码块:每次 new 都跑一遍,在构造方法之前
它属于对象级别,没有 static 修饰,直接写在类体里。每次调用构造方法前,JVM会自动把所有实例代码块(按定义顺序)插入到该构造方法体的最开头,哪怕你没写任何构造器,编译器也会合成默认构造器并塞入这些块。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 可以访问 this、所有实例变量和方法
- 常用于抽取多个构造器共有的初始化逻辑(比如统一设置默认状态)
- 执行顺序是:父类实例块 → 父类构造方法 → 子类实例块 → 子类构造方法
构造方法:对象成型的最后一环
它不单独决定初始化起点,而是在实例代码块执行完毕后才真正开始执行。它的作用是完成对象特有逻辑:参数校验、资源分配、业务规则设定等。
- 若未显式写 super() 或 this(),编译器默认插入 super()
- super() 调用会触发父类构造流程,所以父类构造方法总在子类之前完成
- 即使构造方法里有 this() 调用其他重载构造器,实例代码块也只执行一次(在最终被调用的那个构造器入口处)
别忽略变量初始化语句的位置影响
静态变量赋值(public static int x = 1;)和静态代码块同级,按出现顺序执行;实例变量赋值(private String name = "Tom";)和实例代码块也同级,同样按定义顺序执行。它们不是“语法糖”,而是真实参与执行流的初始化步骤。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










