关于java的try / catch语法;

Regarding java's try/catch syntax; are these blocks equivalent?

本问题已经有最佳答案,请猛点这里访问。

在下面的块中:

1
2
3
4
5
6
7
8
    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());
        }
    }

这是否等同于以下数据块:

1
2
3
4
5
try {
    final InputStream fis = new BufferedInputStream(Files.newInputS...;
} catch {
    System.out.println("Created" + ais.toString());...
}

我在ApacheCommon的库中偶然发现了这个用于try/catch的语法,我不确定如何使用它。如果我在这里所能想到的唯一假设中是不正确的,有人能帮助我理解它吗,或者给我指一个解释这个语法的引用吗?我在这里搜索了很多东西,没有找到任何合适的东西,尽管我的搜索功能不是最好的。

事先谢谢!


不。第一个是尝试使用资源,这不是一个直观的名称。当您需要使用某个资源然后关闭它时,就会使用它。它避免了每次都必须手动关闭这些资源,并有效地将资源范围限制在花括号内。

后一个不同:Try/Catch块退出后,资源fis仍将打开。引入try-with-resources来解决这个问题。