1

JAVA でコーディングしていたところ、突然次のようなコードを書きました。

int x = 10;
boolean b = true;

l1: b = x > 1;

l2: while (b) {

    // some code
    break l2;
}

驚いたことに、コードは正しくコンパイルされ、実行されます。私は自分のl1ラベルで何もしていませんが、なぜこのステートメントで正しくコンパイルされるのですか?

gotoはJavaで存在することを知っていますが、使用されていません( Java言語キーワード)が、それにジャンプできる方法はありますか?

4

3 に答える 3

3

任意のステートメントにラベルを付けることができますが、これらはまたはと組み合わせて使用​​する場合にのみ役立ちbreakcontinueます。

C や C++ とは異なり、Java プログラミング言語には goto ステートメントがありません。識別子ステートメント ラベルは、ラベル付きステートメント内の任意の場所に表示される break (§14.15) または continue (§14.16) ステートメントと共に使用されます。

つまり、ラベルを使用可能にするには、break または continue を含むステートメントにラベルを適用する必要があります。これは、ループまたは for breakonly の任意のブロックにすることができます。

于 2013-02-25T19:20:59.720 に答える
2

いいえ、ジャンプしてl1実行を続行する方法はありません。おっしゃる通りgoto、未使用のキーワードです。ラベルは、break/へのループにラベルを付ける場合にのみ役立ちますcontinue

本当に「ジャンプ」したい場合は、再帰などの他のプログラミング手法を使用してこれを行う方法があります。

l1つまり、単に中断する代わりにジャンプして戻りたい場合はl2...

public void myMethod() {
    b = x > 1;

    while (b) {
        // some code
        myMethod();
    }
}

ただし、必ず返品条件を追加してください。

于 2013-02-25T19:18:11.310 に答える
0

多くのループから抜け出したい場合は、ラベル付きのcontinueステートメントを使用できます。コードの回避策は次のようになります。

int x = 10;
boolean b = true;

l1:
  for(int i=1;i>0;i--) { b = x > 1;

       l2: while (b) {
           // some code
           //break l2;
           i++;continue l1;
       }
  }
于 2013-02-25T20:00:55.023 に答える