0

finallyの目的は、いくつかの命令またはクリーンアップ コードが実行されることを保証することですfinallyしかし、catch ブロックの後にコードを使用または配置することの実際の違いは何ですか。
つまり、使用する必要がある場合の例を教えてくださいfinally。そうしないと、コードがまったく実行されない可能性があります。

4

5 に答える 5

4

最後に、catch ブロックで何が起こったかに関係なく実行します。いくつかのケースが存在します。

catch(Exception E)
{
    ...
    throw new OtherException(BetterMessage, E);
}

また

catch { return null; }

また

catch { SomeMethodThatWillThrowAnException(); }

したがって、Catch ブロックを終了するために例外を返すかスローしても、finally ブロックは実行されますが、try-catch の直後のコードは無視されます。

于 2014-05-22T20:45:13.137 に答える
1

最後に何があっても実行します。

一例

public void test() {
    try { 
       int x = 0;
       return;
    } catch(Exception ex) { 
       ex.printStackTrace();
    } finally { 
      System.out.println("Hello from finally");
    }  

    System.out.println("Hello from after catch");
}

この場合、"Hello from after catch" は出力されませんが、"Hello from finally" は出力されます。

于 2014-05-22T20:50:08.990 に答える
0

投げてキャッチしても、finally ブロックは何があっても発火します。たとえば、catch によってプロセスが終了したり、アプリケーションがクラッシュしたりする可能性がある場合など、finally ブロック内にない catch の後に配置されたコードは実行されない可能性があります。

于 2014-05-22T20:42:23.767 に答える
0

ブロックは、finally例外がスローされるかどうかに関係なく実行されます。

あなたの質問は、を使用することと、ブロックの後にコードを配置することの違いは何finallycatchですか。例外がスローされた場合、ブロックの後のコードはcatch実行されません。コードをfinallyブロックに配置すると、ブロックされます。

于 2014-05-22T20:43:53.037 に答える
0

キャッチできない例外が発生する可能性があります。finallyブロックは、予期しない例外がスローされた場合でも、ブロック内のコードの実行を保証します。

于 2014-05-22T20:50:05.227 に答える