您可以在一个 Java try-with-resources 块中使用多个资源,并让它们全部自动关闭。下面是一个在 try-with-resources 块中使用多个资源的示例:
package com.hxstrive.jdk7.try_with_resources; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.InputStreamReader; /** * JDK7 新特性 try-with-resources * @author hxstrive.com */ public class TryWithResourcesDemo2 { public static void main(String[] args) throws Exception { try( FileInputStream input = new FileInputStream("D:\\test.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(input)) ) { String line; while((line = reader.readLine()) != null) { System.out.println(line); } } } }
本例在 try 关键字后的括号内创建了两个资源。一个 FileInputStream 和一个 BufferedReader。当执行离开 try 代码块时,这两个资源都将自动关闭。
在 Java try-with-resources 结构中声明的资源将按照其创建/在括号内列出的相反顺序关闭。例如:
try( FileInputStream input = new FileInputStream("D:\\test.txt"); BufferedReader reader = new BufferedReader(new InputStreamReader(input)) ) { //... }
上面示例中,首先关闭的是 reader,然后才是 input。
这种关闭顺序的设计是为了确保资源的正确释放,避免可能出现的资源泄漏问题。比如,如果一个资源的关闭依赖于另一个资源先关闭并释放相关的资源或状态,按照声明的相反顺序关闭就能保证这种依赖关系的正确处理。这和我们手动关闭 IO 资源和 JDBC 资源类似。