0

プログラムに複数のリターンがある場合、Javaプログラムで何が返されるのか疑問に思っていました。

private int numberReturner()
{
    if (a) return a;
    else if (b) return b;
    for (int i = 1; i < board.size()-1; i++)
    {
        if (c) return c;
    }
    return d;
}

では、a が真であるとしましょう (a を返す必要があります) が、プログラム全体のコードの最後の行であるため、d を返しませんか? これはなぜですか?

ちょっと変な言い方だったらすみません…

4

6 に答える 6

4

「return」ステートメントに遭遇すると、メソッドは実行を終了し、その値を返します。

そのメソッドは、最後の行に到達する前に他の return ステートメントが検出されない場合にのみ d を返します。

于 2012-04-23T04:50:40.893 に答える
2

通常、最初に遭遇した「return」が返されます。ただし、finally ブロックで "return" ステートメントがある場合は、finally ブロックの "return" が返されます。例えば

private int m1(){
    try{
        return 1;
    }finally{
        return 2; //this will be returned instead
    }
}
于 2012-04-23T04:54:56.653 に答える
1

すでに「返品」されている場合、その後の返品は決してありません。

于 2012-04-23T04:51:24.393 に答える
1

return ステートメントが現在のメソッドから終了し、制御フローがメソッドが呼び出された場所に戻るため、メソッドは a を返します。Java チュートリアルのさまざまな分岐キーワードの詳細をお読みください。http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

于 2012-04-23T04:52:33.737 に答える
1

returnステートメントが実行されると、メソッドは終了し、そうでない場合はvoid戻り値が返されます。

私はこの規則の例外を 1 つだけ知っていますfinally。次の例を見てください。

public static void main(String[] args) {
    System.out.println(test());
}

private static int test() {
    try {
        return 1;
    } finally {
        return 2;
    }
}

この場合、ステートメントは常にメソッドを終了する前に実行されるtest()ため、2 が返されます。finally

于 2012-04-23T04:52:56.117 に答える
0

現在の実行スレッドは、最初にreturnステートメントに遭遇したときにメソッドを離れます (このルールの注目すべき例外はtry...finallyブロックの場合です。ブロックでは、areturnに遭遇するとfinally{...}、メソッドを離れる前にブロックが実行されます。

于 2012-04-23T04:53:09.433 に答える