java代码块分为局部、构造、静态三类:局部块在方法内每次调用时执行,限定变量作用域;构造块在每次new对象时、super()/this()之后、构造方法体之前执行,用于统一初始化;静态块在类首次加载时仅执行一次,优先级最高,用于类级资源初始化。

代码块在Java对象创建流程中不是辅助手段,而是初始化链条里不可跳过的一环。它和字段赋值、构造方法共同构成严格时序的执行序列,缺一不可。
构造代码块:每次new都跑一遍的统一初始化入口
构造代码块写在类体中、方法外,用{ }包裹,不加static。它没有名字,也不属于某个方法,但JVM会把它自动插入到每个构造方法的开头——在super()或this()调用之后、构造体代码之前。
- 适合抽取多个构造器共用的逻辑,比如状态校验、日志打点、资源预加载
- 能访问实例变量和实例方法,但不能直接调用this()或super()
- 如果类中有多个构造代码块,按源码从上到下依次执行
- 它在实例变量显式赋值之后运行,所以能看到字段已被赋予默认值或初始表达式结果
静态代码块:类加载时只跑一次的“奠基者”
用static { }定义,位于类中任意位置。它在类第一次被JVM加载时执行,且仅一次,早于所有对象创建过程。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 常用于初始化静态成员、注册驱动、读取配置文件、预热缓存等一次性操作
- 只能访问静态字段和静态方法,不能使用this或非静态成员
- 多个静态代码块也按源码顺序执行,适合分步初始化复杂静态资源
- 子类加载前,父类的静态代码块一定已执行完毕
局部代码块:控制变量生命周期的小范围作用域
写在方法内部的{ },不参与类或对象的初始化流程,纯粹为管理变量可见性和生命周期服务。
- 块内声明的变量在右括号结束时立即失效,内存可被及时回收
- 同一方法中可存在多个同名变量,只要不在嵌套块中互相遮蔽就互不影响
- 常见于if、for、try等语句中,让临时变量“用完即弃”
- 对性能影响微小,但能显著提升代码可读性和安全性
三者在初始化流程中的精确位置
当你执行new Child()时,JVM按以下顺序执行:
- 先触发父类静态代码块 → 子类静态代码块(仅首次加载类时)
- 接着父类构造代码块 → 父类构造方法体
- 然后子类构造代码块 → 子类构造方法体
- 构造代码块始终在对应构造方法体之前,但在super()调用之后
这个顺序是硬性规则,不受代码书写位置影响,只取决于继承关系和new动作本身。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










