web-dev-qa-db-ja.com

それの後にリターンでトライキャッチキャッチ

私は(ほとんどの部分で)試行、キャッチ、および最終的に動作する方法を知っていますが、私が疑問に思っていたことが1つあります。try-catch-finallyの後にreturnステートメントで何が起こるか、try(またはcatch )?

例えば:

public boolean someMethod(){
    boolean finished = false;
    try{
        // do something
        return true;
    }
    catch(someException e){
        // do something
    }
    finally{
        // do something
    }
    return finished;
}

試行で何も問題がなかったとしましょう。そのため、trueを返しました。次に、最後に接続を閉じるようなことをしますか?

メソッドは、finallyで何らかの処理を行った後(つまり、メソッドがtryでtrueを返した後)に停止しますか、それとも、finallyの後で続行し、結果としてfinished(false)を返しますか?

回答いただきありがとうございます。

20
Kevin Cruijssen

Finallyブロックが実行されても、プログラムに戻ったことを忘れさせることはありません。すべてがうまくいくと、finallyブロックの後のコードは実行されません。

これを明確にする例を次に示します。

public class Main {

    public static void main(String[] args) {
        System.out.println("Normal: " + testNormal());
        System.out.println("Exception: " + testException());
    }

    public static int testNormal() {
        try {
            // no exception
            return 0;
        } catch (Exception e) {
            System.out.println("[normal] Exception caught");
        } finally {
            System.out.println("[normal] Finally");
        }
        System.out.println("[normal] Rest of code");
        return -1;
    }

    public static int testException() {
        try {
            throw new Exception();
        } catch (Exception e) {
            System.out.println("[except] Exception caught");
        } finally {
            System.out.println("[except] Finally");
        }
        System.out.println("[except] Rest of code");
        return -1;
    }

}

出力:

[normal] Finally
Normal: 0
[except] Exception caught
[except] Finally
[except] Rest of code
Exception: -1
18
Joffrey

すべてが順調に進んだ場合、tryブロックの実行後にfinallyが実行され、内部でreturnが実行されます。

tryの内部で問題が発生した場合、exceptionがキャッチされて実行され、次にfinallyブロックが実行されてから、その後のリターンが実行されます。

7

その場合、finally内のコードは実行されますが、例外がない場合、他のリターンはスキップされます。何かをログに記録することで、これを自分で確認することもできます。

System.exitについても参照してください。 JavaのSystem.exit()はtry/catch/finallyブロックでどのように機能しますか?

そして、finallyからの戻りを参照してください。 Javaのfinallyブロックからの戻り

3
public int Demo1()
    {
        try{
            System.out.println("TRY");
            throw new Exception();
            }catch(Exception e){
                System.out.println("CATCH");
            }finally{
                System.out.println("FINALLY");
            }return 0;

    }

このメソッドの呼び出しの出力は次のようになります

TRY
CATCH
FINALLY
0

考慮事項Try{}catch{}finally{}この特定のケースでは、1つずつ実行される一連のステートメントとして。そして、制御は戻るために行きます。

2
CoderCroc

間違いなく、try内のコードは実行されますが、returnステートメントに到達すると、tryブロックでreturnステートメントを実行せずに、finallyブロックに移動します。次に、finallyのコードが実行され、次にreturnステートメントが実行されます。 tryが実行されます。

0
Narendra11744