Java异常没有被抓住?

问题:

我有一个小的理论问题与try-catch结构。
我昨天就Java进行了实用考试,我不明白下面的例子:

try {
    try {
        System.out.print("A");
        throw new Exception("1");
    } catch (Exception e) {
        System.out.print("B");
        throw new Exception("2");
    } finally {
        System.out.print("C");
        throw new Exception("3");
    }
} catch (Exception e) {
    System.out.print(e.getMessage());
}

问题是“输出会是什么样子”?
我很确定它会是AB2C3,但是惊讶的是,这是不正确的。
正确的答案是ABC3(测试,真的是这样)。
我的问题是,异常(“2”)去哪里了?

回答:

Java Language Specification 14.20.2.

如果由于R原因,catch块突然完成,则finally块被执行。那么有一个选择:

所以,当有一个catch块抛出异常时:

try {
    // ...
} catch (Exception e) {
    throw new Exception("2");
}

但也有一个finally块也引发了一个例外:

} finally {
    throw new Exception("3");
}

 Exception("2")将被丢弃,只有Exception("3")将被传播。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Java exception not caught?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

7 + 3 =