Java代码块
🧠 Java 代码块概述
在 Java 中,代码块(Code Block) 是用 {}
括起来的一段代码。根据其用途和执行时机的不同,可以分为以下几类:
- 普通代码块
- 构造代码块
- 静态代码块
- 同步代码块(多线程中使用)
1️⃣ 普通代码块(Local Code Block)
✅ 定义:
定义在方法内部的代码块,用于限制变量的作用域或组织逻辑。
⏱ 执行时机:
当程序运行到该代码块时执行。
🔁 特点:
- 变量只在代码块内有效
- 多次调用方法会多次执行
💡 示例代码:
public class Demo {public static void main(String[] args) {{int x = 10;System.out.println("x = " + x);}// System.out.println(x); // 编译错误:x不可见}
}
2️⃣ 构造代码块(Instance Initialization Block)
✅ 定义:
定义在类中、方法外的代码块,没有 static
关键字修饰。
⏱ 执行时机:
每次创建对象时,在调用构造函数之前执行。
🔁 特点:
- 可以对对象进行统一初始化
- 多个构造器共用,避免重复代码
💡 示例代码:
public class Person {{System.out.println("构造代码块执行");}public Person() {System.out.println("无参构造器执行");}public Person(String name) {System.out.println("带参构造器执行:" + name);}
}// 测试类
public class Test {public static void main(String[] args) {new Person();new Person("Tom");}
}
📌 输出结果:
构造代码块执行
无参构造器执行
构造代码块执行
带参构造器执行:Tom
3️⃣ 静态代码块(Static Initialization Block)
✅ 定义:
使用 static
修饰的代码块,定义在类中、方法外。
⏱ 执行时机:
在类第一次被加载时执行,且仅执行一次。
🔁 特点:
- 用于类级别的初始化操作(如加载驱动、读取配置文件)
- 先于构造代码块和构造器执行
- 多个静态代码块按书写顺序执行
💡 示例代码:
public class Animal {static {System.out.println("静态代码块执行");}{System.out.println("构造代码块执行");}public Animal() {System.out.println("Animal构造器执行");}
}// 测试类
public class Test {public static void main(String[] args) {new Animal();new Animal(); // 第二次不会执行静态代码块}
}
📌 输出结果:
静态代码块执行
构造代码块执行
Animal构造器执行
构造代码块执行
Animal构造器执行
4️⃣ 同步代码块(Synchronized Block)
✅ 定义:
用于多线程环境下控制线程同步,防止多个线程同时访问共享资源。
💡 示例代码:
public class Counter {private int count = 0;public void increment() {synchronized (this) {count++;}}public int getCount() {return count;}
}// 多线程测试
public class Test {public static void main(String[] args) throws InterruptedException {Counter counter = new Counter();Thread t1 = new Thread(() -> {for (int i = 0; i < 1000; i++) {counter.increment();}});Thread t2 = new Thread(() -> {for (int i = 0; i < 1000; i++) {counter.increment();}});t1.start();t2.start();t1.join();t2.join();System.out.println("最终计数: " + counter.getCount());}
}
📌 输出结果:
最终计数: 2000
🔄 总结:各种代码块执行顺序
在一个类中,不同代码块的执行顺序如下:
- 静态代码块(类加载时执行,仅一次)
- 构造代码块(每次实例化前执行)
- 构造器(具体构造方法)
- 局部代码块(方法中定义,按顺序执行)
📝 应用场景建议
类型 | 场景说明 |
---|---|
普通代码块 | 控制变量作用域、简化逻辑结构 |
构造代码块 | 对象初始化,多个构造器复用代码 |
静态代码块 | 加载驱动、配置文件、静态资源 |
同步代码块 | 多线程下保证线程安全 |
✅ 小贴士
- 一个类可以有多个静态代码块和构造代码块。
- 静态代码块不能访问非静态成员。
- 构造代码块可以访问静态和非静态成员。
- 静态代码块 > 构造代码块 > 构造器