Java代码块分为普通、构造、静态和同步四类:普通代码块限变量作用域;构造代码块在对象创建时执行,用于初始化;静态代码块类加载时执行一次,初始化静态资源;同步代码块保障线程安全。

Java代码块是指用一对大括号 { } 括起来的一段代码,它能定义一个独立的作用域,用来组织逻辑、控制变量生命周期或在特定时机执行初始化操作。
普通代码块(局部代码块)
写在方法内部的代码块,主要作用是**限制变量作用域、及时释放资源**。
- 里面声明的变量只在该块内有效,出了大括号就不可访问
- 适合临时计算、避免变量名冲突、减少内存占用
public void doSomething() {
{
int temp = 10;
System.out.println(temp); // ✅ 可以访问
}
// System.out.println(temp); // ❌ 编译错误:找不到符号 temp
}
构造代码块(实例代码块)
写在类中、方法外的代码块,用 { } 包裹,没有修饰符也没有名字。每次创建对象时,它会在构造方法执行前自动运行,且优先于构造方法中的代码。
- 所有构造方法共用,适合抽取多个构造器中重复的初始化逻辑
- 可以访问类的成员变量和方法
class Person {
String name;
{ // 构造代码块
System.out.println("正在初始化Person对象");
name = "未知";
}
public Person() {}
public Person(String name) { this.name = name; }
}
无论调用哪个构造方法,都会先打印那句话并设置默认 name。
立即学习“Java免费学习笔记(深入)”;
静态代码块
用 static { } 定义,属于类级别,在类第一次被加载进 JVM 时执行,且**只执行一次**。
- 常用于初始化静态变量、加载驱动、读取配置等一次性操作
- 不能访问非静态成员(因为此时对象还没创建)
class DBUtil {
static Connection conn;
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://...");
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
同步代码块
配合 synchronized 关键字使用,用于线程安全控制,锁定指定对象或类,保证同一时刻只有一个线程执行该块内代码。
- 比同步方法更灵活,可以精确控制锁的粒度
- 格式:
synchronized(对象引用) { ... }
public void withdraw(double amount) {
synchronized(this) {
if (balance >= amount) {
balance -= amount;
}
}
}
基本上就这些。代码块看着简单,但作用各不相同——有的管作用域,有的管初始化时机,有的管线程安全。用对地方,代码会更清晰、更健壮。











