java7新特性之Try-with-resources (TWR)

109 阅读1分钟

Java 7 引入了一个非常有用的特性,称为 Try-with-resources (TWR),它用于简化资源管理,尤其是在处理 I/O 操作时。TWR 语法可以自动关闭实现了 java.lang.AutoCloseable 接口的资源,从而减少了手动释放资源的麻烦,并减少了可能的资源泄露。

Try-with-resources 的基本用法

以下是一个使用 TWR 的简单示例,演示如何读取文件并自动关闭文件资源:

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TryWithResourcesExample {
    public static void main(String[] args) {
        // 使用 try-with-resources 语句
        try (BufferedReader br = new BufferedReader(new FileReader("example.txt"))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

关键点

  1. 自动资源管理

    • 在 TWR 语句中,任何实现了 AutoCloseable 接口的对象都会在 try 块结束时自动关闭。这包括所有实现了 Closeable 接口的类(例如,BufferedReaderFileInputStream 等)。
  2. 简化代码

    • 不需要显式地在 finally 块中关闭资源,减少了代码的复杂性和潜在的错误。
  3. 多个资源管理

    • 可以在一个 try 语句中声明多个资源,资源之间用分号分隔。例如:
      try (BufferedReader br = new BufferedReader(new FileReader("example.txt"));
           FileWriter writer = new FileWriter("output.txt")) {
          // 处理资源
      }
      
  4. 异常处理

    • 如果 try 块和自动关闭资源的过程中都抛出了异常,try 块中的异常会被抑制,资源关闭时的异常会被抛出。被抑制的异常可以通过 Throwable.getSuppressed() 方法获取。

适用场景

Try-with-resources 非常适用于需要显式关闭的资源,例如文件、网络连接、数据库连接等。它不仅提高了代码的可读性,还减少了资源泄露的风险,是编写健壮 Java 程序的好习惯。