12

ネストされたtryを含むこのJavaコードがあります:

try
{   
    try
    {
        [ ... ]
    {
    catch (Exception ex)
    {
        showLogMessage(ex);
        return;
    }

    while (condition == true)
    {
        try
        {
            [ ... ]
        {
        catch (Exception ex)
        {
            showLogMessage(ex);
            continue;
        }

        [ ... ]
    }
}
catch (NumberFormatException e)
{
    showLogMessage(e);
}
finally
{
    doSomeThingVeryImportant();
}

finally例外が発生したときに常に実行されるかどうかを知りたいです。returncatch ブロックにはorcontinueステートメントがあるため、これを尋ねます。

いつdoSomeThingVeryImportant()実行されますか?私が得たExceptionとき、私はNumberFormatException

catch ブロックが実行された後に、finally ブロックも実行される場合にのみ必要です。

4

10 に答える 10

6

The finally block always executes when the try block exits(クリック)。

于 2013-05-07T06:46:04.600 に答える
2

はい、Finally は常に実行されます。例外あり、例外なし。

これは、コードの一部が常に実行されるようにする方法です。

たとえば、オブジェクトを破棄したり、開いているサーバー接続を閉じたりするために使用されます。

オラクルからのこのリンクをチェックしてください:

http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

于 2013-05-07T06:46:34.820 に答える
2

はい、finallyブロックは常に実行されます。

ソース: http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

于 2013-05-07T06:47:26.783 に答える
2
The finally block always executes when the try block exits. 
This ensures that the finally block is executed even if an unexpected exception occurs

ここから取得: http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

さらに、このページではmay not、try または catch コードの実行中に JVM が存在する場合、または try/catch を実行しているスレッドが中断または強制終了された場合に、finally ブロックが実行されることを説明しています。

したがって、JVM を強制終了するか、try/catch がスレッドで実行されていない限り、finally ブロックは常に実行されます。

于 2013-05-07T06:46:25.710 に答える
2

はい; または、少なくとも、可能な限り「常に」に近い。(だから、あなたがreturnまたは別のを持っていてもthrow。)

プロセスが強制終了された場合、またはプログラムがデッドロックまたは無限ループに陥った場合、またはデバイスが隕石に衝突した場合、プログラム フローはfinallyブロックに到達しません。

于 2013-05-07T06:49:02.873 に答える
0

はい、finally ブロックは常に実行されます。 ただし、利用規約が適用されます。

System.exit ();を呼び出さない限り、

于 2013-05-07T06:48:32.640 に答える
0

はい、最終的には常に実行されます。これは、例外が発生した場合、または例外がない場合にリソースを閉じる/処理するようにプログラムできるためです。

http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html


コメントの質問に答える更新System.exit()

System.exit()いくつかの で失敗しない限り、finally ブロックは実行されませんSecurityException


質問が変更された後に更新します。例外が何であっても、finally ブロックは常に実行されます。

その場合Exception、キャッチブロックはキャッチのみであるため実行されませんNumberFormatException

于 2013-05-07T06:46:24.750 に答える