119

このコードのおかげで、数分間画面を見つめることができました。

loop:
for (;;) {
    // ...
}

137行目はこちら

これは今まで見たことがなく、Java に「ループ」キーワードがあることも知らなかった (NetBeans はキーワードのように色付けさえしていない)、JDK 6 で正常にコンパイルされる。

説明は何ですか?

4

12 に答える 12

211

keywordではありませんlabel

使用法:

    label1:
    for (; ; ) {
        label2:
        for (; ; ) {
            if (condition1) {
                // break outer loop
                break label1;
            }
            if (condition2) {
                // break inner loop
                break label2;
            }
            if (condition3) {
                // break inner loop
                break;
            }
        }
    }

ドキュメンテーション

于 2010-09-29T13:05:15.877 に答える
74

他の投稿者が言っているように、これはキーワードではなくラベルです。ラベルを使用すると、次のようなことができます。

outer: for(;;) {
   inner: for(;;) {
     break outer;
   }
}

これにより、外側のループを破ることができます。

ドキュメントへのリンク

于 2010-09-29T13:07:29.210 に答える
31

質問には回答がありますが、補足として:

「なぜこの Java コードが有効なのですか?」というインタビューの質問を聞いたことがあります。(より単純な例を取り除きました。これはより卑劣なものです、thx Tim Büthe):

url: http://www.myserver.com/myfile.mp3
downLoad(url);

このコードが何であるか(ひどいことは別として)知っていますか?

解決策: 2 つのラベル、コメント、urlおよびラベルと同じ名前 ( ) を持つパラメーターを使用したメソッド呼び出し。はい、これはコンパイルされます (メソッド呼び出しとローカル変数を別の場所で定義した場合)。httpwww.myserver.com/myfile.mp3url

于 2010-09-29T13:41:18.953 に答える
16

それはキーワードではなく、ラベルです。breakネストされたループ内でandcontinueキーワードとともに使用することを意図しています。

outer:
for(;;){
    inner:
    for(;;){
        if(){
            break inner; // ends inner loop
        } else {
            break outer; // ends outer loop
        }
    }
}
于 2010-09-29T13:08:16.837 に答える
5

これはキーワードではありません。ラベルです。

これにより、ラベル付けされたラベル付けbreakされcontinueた .

于 2010-09-29T13:05:16.703 に答える
4

これは本当に org.life.java の回答に対する seanizer のコメントへの返信ですが、コードを入れたかったのでコメント機能を使用できませんでした。

「ブレーク ラベル」の使用法を見つけることは非常にまれですが、時折発生します。最も一般的なケースは、次のように、ネストされたループを検索する必要がある構造内にあるものを検索しているときです。

search:
for (State state : stateList)
{
  for (City city : state.cityList)
  {
    if (city.zipcode.equals(wantZip))
    {
      doSomethingTo(city);
      break search;
    }
  }
}

通常、そのような場合、ヒット時に見つかったオブジェクトを返すことができるように、すべてをサブルーチンにプッシュし、ループの最後に落ちた場合は、null を返して見つからないことを示すか、例外をスローすることができます。しかし、これは時々役に立ちます。

率直に言って、Java の発明者がこの機能を組み込んだのは、これと例外処理の間で、GOTO の最後の 2 つの正当な使用を排除したためだと思います。

非常に遅い補遺:

私は一度、コードの素晴らしいギャグ行を見ました。プログラマーは次のように書いています。

http://www.example.com/xyz.jsp
for (Foo foo1 : foolist)

彼は実際には「example.com」とは言いませんでしたが、当社の Web サイトです。

コードに URL があるような印象を与えます。何かを行うように、正常にコンパイルされます。しかし...それは何をしますか?

実際には何もしません。「http:」は、彼が決して参照しないラベルです。次に、「//」は行の残りをコメントにします。

于 2010-09-29T20:53:10.620 に答える
4

これはブレーク ポイント ラベルであり、たまたま入った最も内側のループではなく、指定されたループから抜け出すことができます。

148 行目で使用されます。

于 2010-09-29T13:06:32.897 に答える
2

これはラベルですが、次の例を見てください。

int a = 0;
int b = 0
while (a<10){
    firstLoop:
    a++;
    while(true){
        b++
        if(b>10){
            break firstLoop;
        }
    }
 }

b>10実行フローが外側のループに移動するとき。

于 2010-09-29T13:07:45.980 に答える
2

ラベルなので、ほとんど何でも書くことができます...ここに例があります

于 2010-09-29T13:08:41.577 に答える
1

キーワードではなく、ラベルです。ループ内にある場合は、forを記述break loop;し、そのループを終了します。

于 2010-09-29T13:39:56.257 に答える
1

これはラベルであり、Java のラベルは、ループをさらに制御するためにキーワードbreakcontinueキーワードで使用できます。

ここでは、かなり良い方法で説明されています。

Java で考えて、ブレーク アンド コンティニュー

于 2010-09-29T13:06:51.380 に答える
0

ラベルです。一般に、Java で制御フローを目的の場所に転送するために使用されるラベルであり、continue や break などのすべてのキーワードには指定された場所の選択肢があります。

于 2014-01-06T10:22:02.833 に答える