2

誰かがJavaで次のものを見たことがありますか?

public void methodName(){ 
   search:
     for(Type[] t : Type[] to){
       do something...
   }
}

この文脈での「search:」の使用に関するドキュメントを誰かに教えてもらえますか?「search:」の検索は生産的ではありませんでした。

ありがとう

4

3 に答える 3

12

ラベルです。Java言語仕様の§14.7から:

ステートメントにはラベルプレフィックスが付いている場合があります。

(退屈な文法は省略、マークアップするのは苦痛)

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

ラベルが頻繁に表示される場所の1つは、ネストされたループです。ここでは、両方のループから早期に抜け出すことができます。

void foo() {
    int i, j;

    outerLoop:                     // <== label
    for (i = 0; i < 100; ++i) {
        innerLoop:                 // <== another label
        for (j = 0; j < 100; ++j) {
            if (/*...someCondition...*/) {
                break outerLoop;   // <== use the label
            }
        }
    }
}

通常break、内側のループでは内側のループだけが壊れますが、外側のループは壊れません。しかし、それはラベルを使用して 指示 breakされているため、外側のループを壊します。

于 2012-04-25T20:31:57.833 に答える
1

これは、ラベル付きループの例です。

これにより、現在のループの代わりに、breakまたはcontinueターゲットループを実行できます。

Outer:
    for(int intOuter=0; intOuter < intArray.length ; intOuter++)
    {
      Inner:
      for(int intInner=0; intInner < intArray[intOuter].length; intInner++)
      {
        if(intArray[intOuter][intInner] == 30)
        {
          blnFound = true;
          break Outer; // this line breaks the outer loop instead of the inner loop.
        }  

      }
    }

例:http ://www.java-examples.com/java-break-statement-label-example

于 2012-04-25T20:32:44.643 に答える
0

これは、JLSで定義されているJavaラベルです:http://docs.oracle.com/javase/specs/jls/se5.0/html/statements.html#78994

于 2012-04-25T20:32:05.513 に答える