2016-10-24 38 views
0

例外処理について学習していますが、今質問があります。
私はこのコードの結果は345だと思いますが、なぜ結果が35であるのか分かりません。
例外が発生しても、コードSystem.out.println(4)を実行するべきではありませんか? method1()であなただけの別の例外であるArithmethicExceptionをキャッチするのに対し、method2()NullPointerException例外処理メソッド終了なしで終了する

public class Six { 
    public static void main(String[] args) { 
     try { 
      method1(); 
     } catch(Exception e) { 
      System.out.println(5); 
     } 
    } 

    static void method1() { 
     try { 
      method2(); 
      System.out.println(1); 
     } catch(ArithmeticException e) { 
      System.out.println(2); 
     } finally { 
      System.out.println(3); 
     } 
     System.out.println(4); 
    } 

    static void method2() { 
     throw new NullPointerException(); 
    } 
} 
+0

NullPointerException例外がcatchブロックによって処理されないため、System.out.println(4);が例外です。ステートメントが実行されていない –

+0

私は愚かな間違いを持っ​​て、今私は理解する!ありがとうございました :) –

答えて

1

がスローされます。この場合、キャッチブロックmethod1()は処理されません。 finallyブロックのみが実行され、メソッドが終了し、例外が呼び出しメソッドに再スローされます(main()

0

NullPointerExceptionがまだアクティブで、その時点で捕捉されなかったため、 。 finallyブロック(3が出力されます)は実行されることが保証されていますので、そこでクリーンアップを行うことができますが、例外を '停止'しません。

関連する問題