如何解决尝试使用资源时会引发异常,同时自动关闭资源时会引发异常
想象一下一种情况,在尝试使用资源块时发生异常。它将调用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 举报,一经查实,本站将立刻删除。