假设我有一个具有两个 OutputStream 成员的类:
public class A {
OutputStream os1 = ...
OutputStream os2 = ...
...
}
现在,在这个类中,我有一个 cleanup()
方法,它必须至少尝试关闭两个流:
public void cleanup() throws IOException {
try {
os1.close();
} finally {
os2.close();
}
}
现在,我确信上面的代码将尝试关闭两个流,但有趣的是当 both 调用 close()
抛出一个IOException。我想说 os2 的异常会向上传播,但也许行为是未定义的。我已经进行了一些谷歌搜索,但没有找到任何可以很好地回答这个问题的内容。
最佳答案
JLS §14.20.2描述行为。
该方法抛出的异常是由os2.close()
引起的异常。
关于Java 'finally'异常抛出规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23839915/