2016-12-22 12 views
0

OCAの準備中に練習問題に遭遇しましたが、abcde 3の代わりに、なぜプログラムの印刷:abce 3が表示されるのか分かりません。ここではプログラム:Javaでの例外の再スロー

'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

'もう一つの問題は、最後のcatchブロックにスローされた例外は単に無視されていることであるcatchブロック最終的にブロックに投げ込まれたものにマスクされている。はい、それは問題ですが、Javaに組み込まれている問題です:) finallyブロックから例外をスローしないでください。 – biziclop

答えて

5

finallyブロックしたがってeが印刷され、try-catchブロックの後に実行常にあります。 に例外をスローし、IllegalArgumentExceptionのブロックcatchを入力すると、abcが明らかになります。

ただし、キャッチブロック内に新しい例外RuntimeExceptionを投げるので、メソッドの呼び出し元にスローされます。 だけ他のすべてはあなたが例外をスロー関数の呼び出し元に渡され、tryブロックでスローされた例外を処理する。

関連する問題