在以下块中:
try (final InputStream fis = new BufferedInputStream(Files.newInputStream(f.toPath()));
final ArchiveInputStream ais = factory.createArchiveInputStream(fn, fis)) {
System.out.println("Created " + ais.toString());
ArchiveEntry ae;
while ((ae = ais.getNextEntry()) != null) {
System.out.println(ae.getName());
}
}
这相当于以下块:
try {
final InputStream fis = new BufferedInputStream(Files.newInputS...;
} catch {
System.out.println("Created " + ais.toString());...
}
我在apache common的库中偶然发现了try / catch的这种语法,我真的不确定如何接受它。如果我不能正确地假设我能在这里想到,有人可以帮助我理解它或指向我解释这种语法的参考吗?我在这里用Google搜索并搜索了大量的内容,并且无法找到任何适用的内容,但不可否认的是,我的搜索功能并不是最好的。
提前致谢!
答案 0 :(得分:0)
没有。首先是尝试使用资源,这不是一个直观的名称。当您需要使用资源然后关闭它时,它会被使用。它使您不必每次都手动关闭它们,并有效地将资源范围限制在花括号内。
后者不一样:在try / catch块退出后,资源fis
仍将打开。引入try-with-resources
来解决此问题。