当前位置: 首页 > 知识库问答 >
问题:

try-with-resource[duplicate]中的close()出现异常

彭华皓
2023-03-14

我读到了JDK7中的试用资源,当我考虑升级应用程序以使用JDK7运行时,我遇到了这个问题。

作为示例,我创建了一个自动关闭资源:

public class AutoCloseableExample implements AutoCloseable {

    public AutoCloseableExample() throws IOException{
        throw new IOException();
    }

    @Override
    public void close() throws IOException {
        throw new IOException("An Exception During Close");
    }

}

现在使用时:

public class AutoCloseTest {

    public static void main(String[] args) throws Exception {
        try (AutoCloseableExample example = new AutoCloseableExample()) {
            System.out.println(example);

            throw new IOException("An Exception During Read");
        } catch (Exception x) {
            System.out.println(x.getMessage());
        } 
    }

}

我如何区分这样的异常,而不必为类(如BufferedReader)创建包装器?

共有1个答案

孙书
2023-03-14

让我们考虑以下类:

public class Resource implements AutoCloseable {

    public Resource() throws Exception {
        throw new Exception("Exception from constructor");
    }

    public void doSomething() throws Exception {
        throw new Exception("Exception from method");
    }

    @Override
    public void close() throws Exception {
        throw new Exception("Exception from closeable");
    }
}

和试用资源块:

    try(Resource r = new Resource()) {
        r.doSomething();
    } catch (Exception ex) {
        ex.printStackTrace();
    }

1.所有3个抛出语句都已启用。

重要提示:在上述所有情况下,您实际上都捕获了所有异常,无论它们被抛到哪里。因此,如果您使用try-with-resource块,您就不需要用另一个try-catch来包装该块,那么额外的块就是毫无用处的。

希望有帮助:)

 类似资料:
  • 为什么尽管我使用了,Eclipse仍然会对以下代码发出奇怪的“resource leak:zin从不关闭”警告: 如果我修改了代码上的“任何内容”,警告就会消失。下面我列出了3个修改版本,它们都可以(没有警告)。 Mod#1:如果我从块中删除循环,则警告将消失: Mod#2:如果保留循环但删除包装,也没有警告: Mod#3:如果我在之外创建了,也没有警告: 我使用了Eclipse Kepler(4

  • 本文向大家介绍什么是Java中的try-with-resource?,包括了什么是Java中的try-with-resource?的使用技巧和注意事项,需要的朋友参考一下 每当我们实例化并使用某些对象/资源时,都应显式关闭它们,否则有可能发生资源泄漏。 从JSE7开始,引入了try-with-resources语句。在这种情况下,我们在try块中声明一个或多个资源,这些资源在使用后将自动关闭。(在

  • 假设我使用的是一个文档不完整的第三方库,它没有源代码。库的方法之一接受来加载各种数据。 不幸的是,Java规范(据我所知)没有提到如果在try-with-resource中手动关闭资源会发生什么。有没有人碰巧知道?

  • 本文向大家介绍Java try-with-resource语法使用解析,包括了Java try-with-resource语法使用解析的使用技巧和注意事项,需要的朋友参考一下 背景 众所周知,所有被打开的系统资源,比如流、文件或者Socket连接等,都需要被开发者手动关闭,否则随着程序的不断运行,资源泄露将会累积成重大的生产事故。 在Java的江湖中,存在着一种名为finally的功夫,它可以保证

  • 问题内容: Java7的try-with-resources非常好,但是我无法绕开为什么需要在语句中包括资源声明的问题。我的直觉说以下应该是可能的: las,这会导致语法错误(含糊地期待a )。将类型定义/声明移动到语句中是可行的,这当然会将事物移动到相应的范围内。当我想从封闭中获得更多收益时,我可以弄清楚该如何解决,我对 为什么 编译器需要这样的东西很感兴趣。 问题答案: 您的版本未明确定义应关