这是正确的,并没有catch条款的要求。 Oracle java 7 doc说,无论是否实际抛出异常,资源都将被关闭。
仅当您要对异常做出反应时,才应使用catch子句。 catch子句将在资源关闭后执行。
以下是Oracle教程的片段:
以下示例从文件中读取第一行。 它使用了 BufferedReader的实例,用于从文件中读取数据。的BufferedReader 是程序完成后必须关闭的资源 它:
static String readFirstLineFromFile(String path) throws IOException {
try (BufferedReader br =
new BufferedReader(new FileReader(path))) {
return br.readLine();
}
} // In this example, the resource declared in the try-with-resources statement is a BufferedReader.
...因为BufferedReader实例是在a中声明的 try-with-resource语句,无论是否,它都将被关闭 try语句正常或突然完成(由于 方法BufferedReader.readLine抛出IOException)。
编辑
关于新编辑的问题:
Java 6中的代码执行catch,然后执行catch块。 这会导致资源仍然可能在catch块中打开。
在Java 7语法中,资源在catch块之前关闭,因此在catch块执行期间资源已经关闭。 这在以上链接中记录:
在try-with-resources语句中,运行任何catch或finally块 在声明的资源关闭后。