6

javaのtry-catch文の実行経路が気になったのですが、以下の状況の詳細がわかりませんでした。

次のようなステートメントがあるとします。

try {

  // Make a call that will throw an exception
  thisWillFail();

  // Other calls below:
  willThisExecute();

} catch (Exception exception) {
  // Catch the exception
}

thisWillFail() の下の行は catch に移動する前に実行されますか、それとも例外がスローされるとすぐに try ステートメントの実行が catch にジャンプしますか?

つまり、call 'a' が try ステートメントで例外をスローしない場合、call 'a' に続く call 'b' が実行されると仮定しても安全でしょうか?

ありがとう

4

4 に答える 4

12

いいえ、以下の行thisWillFail()は実行されません。実行は catch ブロックに移動します。

于 2014-06-28T14:11:35.763 に答える
4

try 句に含まれるいずれかの句がエラーを生成した場合、catch 句のコード (そのエラーに対応 - 1 回の try に対して複数の catch を使用できます) が実行されます。特定の句が失敗するかどうかを事前に知る方法はなく、エラーが発生した後に回復を試みるだけです。

つまり、関数によって例外がスローされるとすぐにthisWillFail()catch 句が実行され、それによって関数がバイパスされwillThisExecute()ます。

于 2014-06-28T14:11:28.573 に答える
1

これを自分でテストしてみませんか?

例外がスローされると、try ブロックは破棄され、catch/finallyステートメントで実行が再開されます。

于 2014-06-28T14:11:35.480 に答える