2017-04-02 15 views
0

以下はException handlingメカニズムを伝播しているクラスQuestionです。目的の出力はExceptionです。なぜ例外が出力されたのかを誰にも説明できますか?次のステップは、プログラム実行の一部として起こるコア-java例外処理

Class Question { 

    public void m1() throws Exception { 

    try { 

    m2(); 

    } finally { 

    m3(); 

    } 
    } 
    public void m2() throws RuntimeException { 

    throw new RuntimeException(); 

    } 

    public void m3() throws Exception { 

    throw new Exception(); 

    } 
    public static void main(String[] args) throws Exception { 

    Question q = new Question(); 

    try { 

    q.m1(); 

    } catch (RuntimeException re) { 

    System.out.println("RuntimeException"); 

    } catch (Exception e) { 

    System.out.println("Exception"); 
    } 
    } 
+0

m1が例外をスローするため – Ravi

+0

最終的にブロックされた場合、m2()メソッドは何を出力しますか? –

+0

最終的にブロック内でm2()メソッドを呼び出すと出力は何ですか? RuntimeException – developer

答えて

0

(1)main()m1()

を呼び出し(2)m1()方法tryブロック呼び出しのM2を()RuntimeException

をスロー(3)m1()メソッドfinallyブロックコールm3()throw

(4)Exceptionバックmain()

(5)あなたのmain()方法でExceptionオブジェクトがキャッチされ、文字列「例外」

キーポイントを印字されますされ、呼び出し元メソッドにスローされますtryブロックによってスローされたException(コード内にtryブロックスローRuntimeException)があっても、finallyブロックが常に実行されるということです。

最終的にブロックされた場合、m2()メソッドは何を出力しますか?

この場合、出力はRuntimeExceptionになります。あなたがExceptionを取得することについては

finally { 
    m3(); 
} 

+0

適切な答えではない、たとえ例外がキャッチされたとしても、キャッチされなくても最終的に呼び出される... catchブロックによって例外がキャッチされた場合、キャッチブロックステートメントを実行し、ついにブロックする –

+0

はい、もちろん、catchブロック存在する)が最初に、そして最後に 'finally' – developer

0

所望の出力は、finallyが最後try後に実行するブロックである 例外

のでException.Can誰もが出力されている理由を説明ですそうでない場合RuntimeException

0

finallyステートメントが実行されると、m3()が呼び出され、Exceptionがスローされるためです。
したがって、finallyステートメントの到達前にRuntimeExceptionが発生したとしても、RuntimeExceptionは、finally節が別の例外をスローする場合には考慮されません。 14.18. The throw Statement JLSから

その試みるブロック throw文が含まれている任意の外側トライ文(§14.20)がある場合は、それらのすべてのfinally節が 文を試すにはコントロールとして実行されている外側に転送され、スローされた値がキャッチされるまで 最後に 句を突然完了すると、スロー 文によって開始された制御の転送が中断される可能性があることに注意してください。

- :ここで

0

は、この質問のプログラムの実行です。最初のmain()メソッドはm1()を呼び出しています

m1()メソッドtryブロックはRuntimeExceptionをスローするm2()を呼び出しています

次に、m1()メソッドがfinallyブロックを呼び出すとm3()が呼び出され、例外がスローされます。

例外はメイン()(発信者メソッド)に返されます

main()メソッドで例外が捕捉されて印刷されます。