2

たとえば、次のスニペットでなぜだろうか。

try{
   //here happens a SQLException
}
catch(SQLException e){
   throw new InstantiationException();
}
finally{
   System.out.println("This is the finally");
}

このコードの結果は、"This is the finally"最初に印刷され、印刷された後にのみ印刷されInstantiationExceptionます...

4

1 に答える 1

3

Java言語仕様から::

値Vがスローされたために、tryブロックの実行が突然完了した場合は、次の選択肢があります。(SQLException throw in try句

実行時型のVが、tryステートメントの任意のcatch句のキャッチ可能な例外クラスと割り当て互換である場合、最初の(左端の)そのようなcatch句が選択されます。選択したcatch句のパラメータに値Vが割り当てられ、そのcatch句のブロックが実行されます。次に、選択肢があります。

catchブロックが正常に完了すると、finallyブロックが実行されます。次に、選択肢があります。

finallyブロックが正常に完了すると、tryステートメントは正常に完了します。

何らかの理由でfinallyブロックが突然完了した場合、同じ理由でtryステートメントが突然完了します。

理由Rのためにcatchブロックが突然完了した場合、finallyブロックが実行されます。次に、選択肢があります:( InstantiationException throw

finallyブロックが正常に完了すると、理由Rでtryステートメントが突然完了します。(System.out.println( "This is the finally")

実行ステップごとにテキストを太字で示しています。

要約する:

  1. tryブロックでSQLExceptionがスローされます
  2. SQLExceptionを処理するCatch句に制御が転送されました
  3. InstantiationExceptionをスローすると、Catch句が突然完了します
  4. 最後に、テキストを印刷してブロックを実行します
于 2013-03-02T22:51:11.940 に答える