在finally块中抛出异常

时间:2014-08-23 18:08:49

标签: java exception

我试图在最后一个块中抛出相同的重复,而先前抛出的expcetion没有被捕获。我希望我们有两个Excpetion类型的对象被抛出。因为我们需要两个catch子句如下:

public static void main(String[] args) {
    try {
        try {
            try {
                throw new Exception();
            } finally {
                System.out.println("finally");
                throw new Exception();
            }
        } catch (Exception ex) {
            System.out.println("catch");
        } finally {
            System.out.println("finally");
        }
    } catch (Exception ex) {
        System.out.println("catch");
    }
    System.out.println("finish");
}

但该节目打印:

finally
catch
finally
finish

也就是说,没有输入第二个catch子句。为什么呢?

3 个答案:

答案 0 :(得分:3)

当你在finally块中抛出异常时,第一个异常会以静默方式消失。

它位于JLS Chapter 14.20.2

  

如果finally块因为S而突然完成,则尝试   陈述突然完成,原因是S。

你是如何进入finally块的。如果您通过抛出异常来输入它,则不能再捕获异常。

答案 1 :(得分:0)

当你从finally块中抛出异常时,它会抑制从try块抛出的任何异常,因此只能捕获一个异常。

第一个捕获cluase已经捕获了该异常,因此第二个没有什么可抓住的。

答案 2 :(得分:0)

您的第一个try-catch已经尝试抓住它,因为任何特殊原因,额外的try块不存在。如果您尝试抛出更多例外情况,我们会发现您会收到语法错误Unreachable code

基本上,将其保存在一个try块中