このコードのおかげで、数分間画面を見つめることができました。
loop:
for (;;) {
// ...
}
これは今まで見たことがなく、Java に「ループ」キーワードがあることも知らなかった (NetBeans はキーワードのように色付けさえしていない)、JDK 6 で正常にコンパイルされる。
説明は何ですか?
このコードのおかげで、数分間画面を見つめることができました。
loop:
for (;;) {
// ...
}
これは今まで見たことがなく、Java に「ループ」キーワードがあることも知らなかった (NetBeans はキーワードのように色付けさえしていない)、JDK 6 で正常にコンパイルされる。
説明は何ですか?
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;
}
}
}
他の投稿者が言っているように、これはキーワードではなくラベルです。ラベルを使用すると、次のようなことができます。
outer: for(;;) {
inner: for(;;) {
break outer;
}
}
これにより、外側のループを破ることができます。
質問には回答がありますが、補足として:
「なぜこの Java コードが有効なのですか?」というインタビューの質問を聞いたことがあります。(より単純な例を取り除きました。これはより卑劣なものです、thx Tim Büthe):
url: http://www.myserver.com/myfile.mp3
downLoad(url);
このコードが何であるか(ひどいことは別として)知っていますか?
解決策: 2 つのラベル、コメント、url
およびラベルと同じ名前 ( ) を持つパラメーターを使用したメソッド呼び出し。はい、これはコンパイルされます (メソッド呼び出しとローカル変数を別の場所で定義した場合)。http
www.myserver.com/myfile.mp3
url
それはキーワードではなく、ラベルです。break
ネストされたループ内でandcontinue
キーワードとともに使用することを意図しています。
outer:
for(;;){
inner:
for(;;){
if(){
break inner; // ends inner loop
} else {
break outer; // ends outer loop
}
}
}
これはキーワードではありません。ラベルです。
これにより、ラベル付けされたラベル付けbreak
されcontinue
た .
これは本当に 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:」は、彼が決して参照しないラベルです。次に、「//」は行の残りをコメントにします。
これはブレーク ポイント ラベルであり、たまたま入った最も内側のループではなく、指定されたループから抜け出すことができます。
148 行目で使用されます。
これはラベルですが、次の例を見てください。
int a = 0;
int b = 0
while (a<10){
firstLoop:
a++;
while(true){
b++
if(b>10){
break firstLoop;
}
}
}
b>10
実行フローが外側のループに移動するとき。
ラベルなので、ほとんど何でも書くことができます...ここに例があります
キーワードではなく、ラベルです。ループ内にある場合は、for
を記述break loop;
し、そのループを終了します。
これはラベルであり、Java のラベルは、ループをさらに制御するためにキーワードbreak
とcontinue
キーワードで使用できます。
ここでは、かなり良い方法で説明されています。
ラベルです。一般に、Java で制御フローを目的の場所に転送するために使用されるラベルであり、continue や break などのすべてのキーワードには指定された場所の選択肢があります。