Java 'finally'异常抛出规则

标签 java exception try-catch-finally

假设我有一个具有两个 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/

相关文章:

java - 使用 Java 混音器混合两个音频流

java - 赋值不返回 void

java - 将任意转义字符转换为 int

Java读取文件权限

java - 如何检测字节码来判断 catch 子句何时被执行?

java - Java中try-catch-finally抛出异常问题

java - 如何在try和catch block 的return语句之后打印finally block 中的语句?

java - 将数字拆分为整数和小数

java - @ExceptionHandler 响应在 Tomcat 中不起作用

java - 为什么字符串输入作为 double 会输出这个答案