我在准备我的OCA时遇到了一个练习,我不明白为什么打印该程序:abce 3
而不是abcde 3
。这个程序:
'public static void main(String[] args) {
System.out.print("a");
try{
System.out.print("b");
throw new IllegalArgumentException();
}catch(IllegalArgumentException e){
System.out.print("c");
throw new RuntimeException("1");
}catch(RuntimeException e) {
System.out.print("d");
throw new RuntimeException("2");
}finally {
System.out.print("e");
throw new RuntimeException("3");
}
}'
任何解释为什么它忽略了最后一个捕获块将非常感激!
答案 0 :(得分:5)
在finally
阻止后,try-catch
阻止始终执行,因此会打印e
。 abc
显而易见,因为您在try
中抛出了异常,并输入了catch
的相应IllegalArgumentException
块。
但是,由于您在catch块中抛出了一个新异常RuntimeException
,因此它将被抛给您方法的调用者。 catch
块仅处理try
块中抛出的异常,所有其他块都传递给您抛出异常的函数的调用者。