微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试使用资源时会引发异常,同时自动关闭资源时会引发异常

如何解决尝试使用资源时会引发异常,同时自动关闭资源时会引发异常

想象一下一种情况,在尝试使用资源块时发生异常。它将调用close方法关闭资源。如果close方法也抛出异常,将会发生什么。会抛出哪个异常??

解决方法

答案是:两者!第一个要突出一些。

首先,您的内部异常将被抛出。然后,将调用Closeable的close()方法,如果该方法也引发了异常,则第一个方法将抑制。您可以在堆栈跟踪中看到它。

测试代码:

public class DemoApplication {

    public static void main(String[] args) throws IOException {

        try (Test test = new Test()) {
            throw new RuntimeException("RuntimeException");
        }
    }

    private static class Test implements Closeable {
        @Override
        public void close() throws IOException {
            throw new IOException("IOException");
        }
    }
}

控制台日志:

Exception in thread "main" java.lang.RuntimeException: RuntimeException
    at DemoApplication.main(DemoApplication.java:15)
    Suppressed: java.io.IOException: IOException
        at DemoApplication$Test.close(DemoApplication.java:22)
        at DemoApplication.main(DemoApplication.java:16)

如果愿意,可以使用exception.getSuppressed()来获取抑制的异常。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。