このコードにより、数分間画面を見つめることができました。
loop:
for (;;) {
// ...
}
( ここの137行目 )
私はこれを見たことがなく、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コードが有効なのか? 』(簡単な例は取り除いた。ここに、卑劣なもの、TimBütheがある)についてのインタビューの質問を聞いたことがあります。
url: http://www.myserver.com/myfile.mp3
downLoad(url);
(ひどいことは別として)このコードが何であるか知っていますか?
解決策:2つのラベル、url
とhttp
、コメントwww.myserver.com/myfile.mp3
と、ラベルと同じ名前(url
)を持つパラメーターを使用したメソッド呼び出し。はい、これはコンパイルします(メソッド呼び出しとローカル変数を別の場所で定義した場合)。
それはキーワードではなく、ラベルです。ネストされたループ内でbreak
およびcontinue
キーワードと共に使用することを意図しています。
outer:
for(;;){
inner:
for(;;){
if(){
break inner; // ends inner loop
} else {
break outer; // ends outer loop
}
}
}
キーワードではありません。 ラベル です。
ラベル付きbreak
およびラベル付きcontinue
に移動できます。
これはブレークポイントラベルであり、単にあなたがたまたま入っている一番内側のループではなく、指定したループから抜け出すことができます。
行148 で使用されます。
これは本当にorg.life.Javaの答えに対するseanizerのコメントへの返信ですが、コメント機能を使用できないようにコードを入れたいと思いました。
「break label」の使用法を見つけることは非常にまれですが、それは時々起こります。最も一般的なケースは、次のようなネストされたループを検索する必要がある構造内にあるものを検索する場合です。
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」とは言いませんでしたが、当社のウェブサイトです。
コードにURLがあるという印象を与えます。それは何かをするように、正常にコンパイルします。しかし...それは何をしますか?
実際には何もしません。 「http:」は、彼が決して参照しないラベルです。次に、「//」は行の残りをコメントにします。
それはラベルですが、次の例を見てください:
int a = 0;
int b = 0
while (a<10){
firstLoop:
a++;
while(true){
b++
if(b>10){
break firstLoop;
}
}
}
いつ b>10
実行フローは外側のループに進みます。
ラベルなので、ほとんど何でも書くことができます...例があります here
これはラベルであり、Java=のラベルは、ループの追加制御のためにbreak
およびcontinue
キーワードとともに使用できます。
ここではかなり良い方法で説明されています:
キーワードではなく、ラベルです。 for
ループ内にbreak loop;
、およびそのループを終了します。
ラベルです。一般に、Javaで使用されるラベルは、継続および中断などのすべてのキーワードが指定された場所の選択を持ちながら、希望の場所で制御フローを転送します。