Java代码块分为普通、构造、静态和同步四类:普通代码块限变量作用域;构造代码块在对象创建时执行,用于初始化;静态代码块类加载时执行一次,初始化静态资源;同步代码块保障线程安全。
Java代码块是指用一对大括号 { } 括起来的一段代码,它能定义一个独立的作用域,用来组织逻辑、控制变量生命周期或在特定时机执行初始化操作。
写在方法内部的代码块,主要作用是**限制变量作用域、及时释放资源**。
public void doSomething() {
{
int temp = 10;
System.out.println(temp); // ✅ 可以访问
}
// System.out.printl
n(temp); // ❌ 编译错误:找不到符号 temp
}
写在类中、方法外的代码块,用 { } 包裹,没有修饰符也没有名字。每次创建对象时,它会在构造方法执行前自动运行,且优先于构造方法中的代码。
class Person {
String name;
{ // 构造代码块
System.out.println("正在初始化Person对象");
name = "未知";
}
public Person() {}
public Person(String name) { this.name = name; }
}
无论调用哪个构造方法,都会先打印那句话并设置默认 name。
用 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;
}
}
}
基本上就这些。代码块看着简单,但作用各不相同——有的管作用域,有的管初始化时机,有的管线程安全。用对地方,代码会更清晰、更健壮。