在Java中,代码块(Code Block) 是由大括号 {}
包裹的代码片段,主要用于控制变量的作用域和对象的初始化。根据位置和修饰符,可分为以下四类:
位置:方法内部
作用:
void demo() {
int outer = 10;
{ // 普通代码块
int inner = 20; // 仅在此块内有效
System.out.println(inner); // ✅
}
System.out.println(inner); // ❌ 编译错误(inner超出作用域)
System.out.println(outer); // ✅
}
位置:类内部,方法外部(无static
修饰)
作用:
public class Person {
private int id;
{ // 构造代码块
System.out.println("执行构造块");
id = generateId(); // 初始化逻辑
}
public Person() {
System.out.println("执行构造函数");
}
}
输出: 执行构造块
执行构造函数
位置:类内部,方法外部(用static
修饰)
作用:
public class ConfigLoader {
static String config;
static { // 静态代码块
System.out.println("加载配置文件");
config = loadConfig(); // 初始化静态资源
}
public static void main(String[] args) {
System.out.println(config); // 直接使用已初始化的值
}
}
Class.forName()
)位置:方法内部(用synchronized
修饰)
作用:
public class Counter {
private int count;
private final Object lock = new Object();
public void increment() {
synchronized(lock) { // 同步代码块
count++; // 线程安全操作
}
}
}
类型 | 位置 | 执行时机 | 核心作用 |
---|---|---|---|
普通代码块 | 方法内部 | 方法调用时 | 限制变量作用域 |
构造代码块 | 类内部(无static) | 每次new 对象时(先于构造器) |
对象成员初始化 |
静态代码块 | 类内部(有static) | 类首次加载时(仅一次) | 静态资源初始化 |
同步代码块 | 方法内部 | 线程进入synchronized 时 |
线程安全控制 |
static A=a; static B=b;
若A依赖B会导致初始化失败)private final Object lock
)而非this
,防止外部恶意加锁本质:所有代码块都是JVM控制执行流程和内存分配的基础工具,合理使用可提升代码的健壮性和可维护性。