If there is a throw
statement in the middle of a function, does the function terminate at this point?
7 に答える
はい、finally
ブロックを除いて、またはスローしている例外の種類をキャッチできる例外ハンドラーが関数内にある場合は例外です。
制御は、コール スタック内の次の例外ハンドラー (ブロック) に渡されcatch
ます。これは、現在のメソッドまたはその親のいずれかにあります。throw
が try/catch ブロックにカプセル化されていない場合、finally
親の catch ブロックが検索される前にすべてのブロックが実行されます。
試してみましたか?:)
正しい答えは、場合によると思います。奇妙な理由でスローを try/catch でラップした場合は、いいえ。コール スタックのどこかで例外をキャッチしなかった場合を除き、そうしなかった場合は、アプリケーション全体がクラッシュする可能性があります。
はい、それをキャッチするか、finally ブロックがない限り:
try {
var foo = 42 /0;
}
finally
{
// This will execute after the exception has been thrown
}
はい、そうです。呼び出しスタックを上に行く例外を生成します。
はい。最寄りのcatch
ブロックに移動します。
例外は、想定されていないときに発生したイベントであるため、アプリケーションはそのようなイベントをどう処理するかを知りません。すべての OOP 言語 (私が知っている) では、ランタイムが行うことは、イベントを呼び出した関数を停止し、誰かがそれをどう処理するかを理解するまで例外をスタックにスローすることです。そこで try / catch ブロックの出番です。