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
发送回主页?
答案 0 :(得分:4)
它就在Java语言规范中。 (§11.3,异常的运行时处理)
如果try-finally或try-catch-finally语句中的try或catch块完成 突然之后,甚至在传播异常期间执行finally子句 如果最终找不到匹配的catch子句。
如果由于try块的突然完成而执行finally子句并且 finally子句本身突然完成,然后突然完成的原因 try块被丢弃,突然完成的新原因从那里传播。