10

If there is a throw statement in the middle of a function, does the function terminate at this point?

4

7 に答える 7

15

はい、finallyブロックを除いて、またはスローしている例外の種類をキャッチできる例外ハンドラーが関数内にある場合は例外です。

于 2011-03-02T07:19:08.020 に答える
7

制御は、コール スタック内の次の例外ハンドラー (ブロック) に渡されcatchます。これは、現在のメソッドまたはその親のいずれかにあります。throwが try/catch ブロックにカプセル化されていない場合、finally親の catch ブロックが検索される前にすべてのブロックが実行されます。

于 2011-03-02T07:20:47.407 に答える
1

試してみましたか?:)

正しい答えは、場合によると思います。奇妙な理由でスローを try/catch でラップした場合は、いいえ。コール スタックのどこかで例外をキャッチしなかった場合を除き、そうしなかった場合は、アプリケーション全体がクラッシュする可能性があります。

于 2011-03-02T07:19:33.557 に答える
1

はい、それをキャッチするか、finally ブロックがない限り:

try {
   var foo = 42 /0;
}
finally
{
  // This will execute after the exception has been thrown
}
于 2011-03-02T07:20:12.540 に答える
0

はい、そうです。呼び出しスタックを上に行く例外を生成します。

于 2011-03-02T07:18:57.177 に答える
0

はい。最寄りのcatchブロックに移動します。

于 2011-03-02T07:19:10.540 に答える
0

例外は、想定されていないときに発生したイベントであるため、アプリケーションはそのようなイベントをどう処理するかを知りません。すべての OOP 言語 (私が知っている) では、ランタイムが行うことは、イベントを呼び出した関数を停止し、誰かがそれをどう処理するかを理解するまで例外をスタックにスローすることです。そこで try / catch ブロックの出番です。

于 2011-03-02T07:25:17.470 に答える