代码块的适用场景

张开发
2026/4/18 13:42:24 15 分钟阅读

分享文章

代码块的适用场景
代码块的作用和适用场景代码块是用{}包裹的一段代码它在 Java 中有多种形式各有不同的作用和使用场景。一、代码块的分类类型位置关键字执行时机局部代码块方法内部无调用到该代码块时构造代码块类中方法外无每次创建对象时在构造方法之前静态代码块类中方法外static类加载时执行一次同步代码块方法内部synchronized获取锁时执行多线程二、各代码块详解1. 局部代码块作用限制变量的作用域让变量在使用完后立即释放。javapublic class Demo { public static void main(String[] args) { // 局部代码块 { int x 10; System.out.println(x); // 可以访问 } // int x 20; // 可以重新定义因为上面的 x 已经销毁 } }适用场景临时变量的生命周期控制减少变量作用域避免命名冲突在某些算法中让临时变量及时释放2. 构造代码块作用提取多个构造方法中的公共代码避免重复编写。javapublic class Student { private String name; private int age; // 构造代码块每次创建对象都会执行 { System.out.println(对象正在初始化...); age 18; // 统一设置默认年龄 } public Student() { System.out.println(无参构造); } public Student(String name) { this.name name; System.out.println(有参构造); } }适用场景多个构造方法有相同的初始化代码无论调用哪个构造方法都需要执行的逻辑如日志记录、计数器加1复杂的实例变量赋值需要计算、算法等3. 静态代码块作用类加载时执行一次用于初始化静态资源。javapublic class DatabaseUtils { private static String url; private static String username; // 静态代码块类加载时执行一次 static { System.out.println(加载数据库配置...); url jdbc:mysql://localhost:3306/test; username root; // 注册驱动 try { Class.forName(com.mysql.cj.jdbc.Driver); } catch (ClassNotFoundException e) { e.printStackTrace(); } } public static Connection getConnection() { // ... } }适用场景加载配置文件properties、yml注册 JDBC 驱动初始化静态集合如字典数据、缓存执行一次性环境检查Java版本、操作系统加载本地库JNISystem.loadLibrary()4. 同步代码块作用保证多线程环境下同一时刻只有一个线程执行该代码块。javapublic class Counter { private int count 0; public void increment() { // 同步代码块锁定当前对象 synchronized (this) { count; } } public int getCount() { return count; } }适用场景多线程操作共享资源需要保证原子性的操作避免线程安全问题三、执行顺序对比javapublic class OrderDemo { static { System.out.println(1. 静态代码块类加载时); } { System.out.println(3. 构造代码块创建对象时); } public OrderDemo() { System.out.println(4. 构造方法); } public static void main(String[] args) { System.out.println(2. main 方法); new OrderDemo(); } }输出text1. 静态代码块类加载时 2. main 方法 3. 构造代码块创建对象时 4. 构造方法四、总结表代码块类型作用适用场景执行次数局部代码块限制变量作用域临时变量、减少命名冲突每次调用构造代码块提取构造方法公共代码多构造方法的共同初始化每次创建对象静态代码块初始化静态资源加载配置、注册驱动、初始化静态集合类加载一次同步代码块线程同步多线程访问共享资源每次获取锁一句话记忆局部限作用域构造抽公共静态只一次同步保线程。

更多文章