回答:
それはない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コードが有効なのか」という質問を聞いたことがあります。(より単純な例を取り除きました。ここに意味のある例を挙げます。TxBimtheです):
url: http://www.myserver.com/myfile.mp3
downLoad(url);
(ひどいものは別として)このコードが何か知っているでしょうか?
解決策:2つのラベル、url
およびhttp
、コメントと、ラベルとwww.myserver.com/myfile.mp3
同じ名前(url
)を持つパラメーターを使用したメソッド呼び出し。そう、これはコンパイルされます(メソッド呼び出しとローカル変数を他の場所で定義した場合)。
それはキーワードではなく、ラベルです。ネストされたループ内でbreak
and continue
キーワードとともに使用することを意図しています:
outer:
for(;;){
inner:
for(;;){
if(){
break inner; // ends inner loop
} else {
break outer; // ends outer loop
}
}
}
inner
ラベルはここでは役に立たない、break;
十分です
inner
、わかりやすくするためにラベルに感謝します。
これは実際には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」ではなく、私たちの会社の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
実行フローが外側のループに進むとき。