构造代码块在每次new对象时执行一次,位于类体内部、方法外部,无static修饰,按源码顺序与字段显式初始化交错执行,适合放置多个构造方法共用的初始化逻辑。

构造代码块每次 new 对象时都执行一次
它不依赖构造方法的调用路径,也不受 this() 或 super() 影响。只要执行一次 new,JVM 就会在分配内存后、进入任何构造方法体之前,完整运行该类中所有构造代码块——按源码从上到下的顺序,且仅此一次。
它和成员变量初始化同属一个阶段
字段显式初始化(如 int x = compute();)与构造代码块交错执行,严格遵循书写顺序:
- 上面的字段初始化先执行
- 紧随其后的构造代码块接着执行
- 再下面的字段初始化继续执行……
这意味着:如果某字段依赖构造代码块中算出的值,就必须把该字段声明写在代码块之后;否则读到的是默认值(null、0、false)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
它不是方法里的普通 {} 块
构造代码块必须定义在类体内部、所有方法外部,没有 static 修饰。方法内写的 { ... } 是局部代码块,只在方法执行到那里时才运行,和对象创建完全无关。混淆这两者,容易误以为“写了 {} 就会随 new 触发”,结果发现日志根本没输出。
它适合放多个构造方法共用的初始化逻辑
比如统一设置默认状态、预加载缓存、校验必要参数等。相比在每个构造方法里重复写,提取到构造代码块更简洁、不易遗漏。但要注意:它不能接收参数,也不能做条件分支(除非用 if),复杂逻辑仍建议封装成私有方法并在块中调用。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










