关于java的try / catch语法;这些块是等价的吗?

时间:2018-02-08 02:12:32

标签: java syntax coding-style try-catch

在以下块中:

    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搜索并搜索了大量的内容,并且无法找到任何适用的内容,但不可否认的是,我的搜索功能并不是最好的。

提前致谢!

1 个答案:

答案 0 :(得分:0)

没有。首先是尝试使用资源,这不是一个直观的名称。当您需要使用资源然后关闭它时,它会被使用。它使您不必每次都手动关闭它们,并有效地将资源范围限制在花括号内。

后者不一样:在try / catch块退出后,资源fis仍将打开。引入try-with-resources来解决此问题。