public class TestException_2 {
public static void main(String[] args) throws Exception{
try {
throw new MyException("异常1");
} catch (MyException e) {
throw e;
} finally {
throw new ArithmeticException("异常3");
}
}
}
public class MyException extends Exception {
public MyException(String ex){
System.out.println(ex);
}
}
运行结果:
个人分析:与try或catch中发生return的同时,finally又发生return的情况差不多一样。 也就是说,finally的throw也像return一样具有使程序提前结束的作用。因为try或catch中发生return的时候实际还未真正的return(如果有finally块的话),还要等finally块执行完成,此时如果finally块中有return语句的话就直接return了,就使程序结束了(也不管前面的try或catch中发生的return)。
同理,如果存在finally语句而且catch发生抛出异常(并未真正抛出,还要等待finally块执行之后),此时finally如果正好也抛出了异常,则真正抛出的异常就是finally中的异常,同时程序也就结束。所以catch发生抛出异常并未真正抛出。