java中的异常重新抛出

时间:2016-12-22 21:07:18

标签: java exception-handling

我在准备我的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");
          }
        }'

任何解释为什么它忽略了最后一个捕获块将非常感激!

1 个答案:

答案 0 :(得分:5)

finally阻止后,try-catch阻止始终执行,因此会打印eabc显而易见,因为您在try中抛出了异常,并输入了catch的相应IllegalArgumentException块。

但是,由于您在catch块中抛出了一个新异常RuntimeException ,因此它将被抛给您方法的调用者。 catch处理try块中抛出的异常,所有其他块都传递给您抛出异常的函数的调用者。