哪个例外被抛出?

时间:2013-12-06 14:25:23

标签: java exception

public class Confusing{
    public static void main(String[] args){
        Confusing cf = new Confusing();
        try{
            cf.confuse();
        }catch(Exception e){
            System.out.println("Caught exception: " + e.getMessage());
        }
    }

    public void confuse() throws Exception{
        try{
            throw new Exception("First Exception");
        }catch(Exception e){
            throw new Exception("Second Exception");

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

为什么结果为Caught exception: Third Exception

首先尝试,它会抛出随后被捕获的First Exception。然后抛出Second Exception,最后抛出Third Exception。为什么只将Third Exception发送回主页?

1 个答案:

答案 0 :(得分:4)

它就在Java语言规范中。 (§11.3,异常的运行时处理

  

如果try-finally或try-catch-finally语句中的try或catch块完成   突然之后,甚至在传播异常期间执行finally子句   如果最终找不到匹配的catch子句。

     

如果由于try块的突然完成而执行finally子句并且   finally子句本身突然完成,然后突然完成的原因   try块被丢弃,突然完成的新原因从那里传播。

相关问题