java代码块本质是{}包裹的可执行语句段,不依附方法或构造器:静态块(static{})类加载时执行一次,用于全局初始化;实例块({})每次new时在构造器前执行,抽取共用初始化逻辑;局部块限于方法内作用域;同步块(synchronized)保障线程安全。

Java里的代码块,本质是一对大括号 {} 包裹的可执行语句段,它不依附于方法或构造器,而是由JVM在特定时机自动触发。掌握它们的类型、执行顺序和适用场景,能帮你写出更清晰、更可控的初始化逻辑。
静态代码块:类加载时只跑一次
用 static{} 定义,随类一起被JVM加载时执行,且仅一次。适合做全局性、一次性初始化工作。
- 典型用途:加载数据库驱动、读取配置文件、初始化静态常量或缓存
- 多个静态块按源码中出现顺序依次执行
- 只能访问静态成员(静态变量、静态方法),不能直接用非静态字段
- 即使没创建对象,只要类被引用(如调用静态方法、访问静态字段),就会触发
实例代码块:每次 new 都会执行
直接写在类里、没加 static 的 {},也叫构造代码块。它在每次创建对象时执行,且总在构造器之前运行。
- 作用是抽取多个构造器共用的初始化逻辑,避免重复代码
- 多个实例块按定义顺序执行,位置靠前的先运行
- 可以访问实例变量和静态成员,也能调用实例方法(前提是该方法不依赖未初始化字段)
- 比构造器更早执行,但晚于静态块——这是三者执行顺序的关键锚点
局部代码块:限定变量作用域的小范围结构
写在方法、构造器或控制流语句(如 if、for)内部的 {}。它不是独立的初始化机制,主要影响变量生命周期。
- 定义在其中的变量只在该块内有效,出了大括号就不可见
- 有助于及时释放内存(尤其处理大对象时),也提升代码可读性
- 不参与类或对象初始化流程,纯粹是语法层面的作用域划分
- 实际开发中较少显式使用,更多是控制流语句或方法体自然形成的结构
同步代码块:多线程下的临界区保护
用 synchronized(锁对象){} 定义,必须出现在方法内部。它不用于初始化,而是保障共享资源的线程安全。
- 执行前需获取指定锁对象的监视器,执行完自动释放
- 适用于需要保护某段代码不被多个线程并发执行的场景
- 和前面三类不同,它不属于“类初始化”体系,而是并发编程工具
- 锁对象可以是任意引用类型,常用
this、类的Class对象或专用锁对象
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











