java - 違い - sts 自動検出構成の取り込み




java:最終的に実行をブロックしよう (2)

finallyブロックが実行されます。 ローカル変数がインクリメントされます。 しかし、そのローカル変数の値はすでに戻り値としてコピーされています。

Java言語仕様から、 14.17:return文

Expressionを持つreturn文は、それを含むメソッドの呼び出し側に制御を移そうとします。 Expressionの値はメソッド呼び出しの値になります。

...

前述の記述では、tryブロックまたはcatch節にreturn文が含まれているメソッドまたはコンストラクタ内にtry文(14.20)がある場合、「制御を移す」ではなく「制御を移す」と書かれています。 tryステートメントは、コントロールがメソッドまたはコンストラクターの呼び出し側に転送される前に、最も内側から最も外側に実行されます。 finally節が突然完了すると、return文によって開始された制御の転送が中断されることがあります

この質問には既に回答があります:

私は、 return;が存在するときにtry-finally実行について混乱しreturn; tryブロック内にあります。 私の理解では、finallyブロックは常に実行されます。つまり、呼び出し元メソッドに戻る前です。 次の単純なコードを検討しながら:

public class TryCatchTest {
    public static void main(String[] args){
        System.out.println(test());
    }
    static int test(){
        int x = 1;
        try{
            return x;
        }
        finally{
            x = x + 1;
        }
    }
}

結果は実際には1です。これはfinallyブロックが実行されていないことを意味しますか? 誰もそれで私を助けることができますか?


tryを終了する前にxを返しています。 私はこれを行うだろう:

public class TryCatchTest {
    public static void main(String[] args) {
        System.out.println(test());
    }
    static int test() {
        int x = 1;
        try {
            do something with x.
        } finally {
            do something that will happen even in case of error;
            x = x + 1;
            return x;
        }
    }
}




finally