1

重複の可能性:
Java の scan: ブロックとは?

私はJava標準ライブラリコードのいくつかを閲覧していてtoUpperCase、String.java(java.lang.String- JDK 1.6.0_32 x64)でメソッドを見つけました。以下のスニペットのコードの無関係な部分を削除しました。

私を混乱させたのはscan: { ... }構文でした。ラムダ式は SE 6 または 7 の一部ではないという印象を受けています。誰か教えてもらえますか?

// String.java - line 2547 onwards.
public String toUpperCase(Locale locale) {
    // Do stuff.

    /* Now check if there are any characters that need to be changed. */
    scan: {
        // Do stuff.
    }

    // Do more stuff.
}
4

3 に答える 3

4
scan: { ... }

それはLabeled Statementsです。通常、ラベルは、ループを中断または継続できるネストされたループの場合に使用されます。

例えば:

outer:while(cond) {
in:while(cond){
   break outer;
}
}
于 2013-01-07T21:08:34.967 に答える
3

ループがない場合でも、Label (通常は UPPER_CASE) を使用できます。例えば

scan: {
   if (condition) break;
   // do something
}

これを使用する唯一の場所は、「見つかった」フラグを避けることです

FOUND: {
    for(MyType mt: myTypeList)
       if(condtion(mt))
            break FOUND;
    // not found code here
}

紛らわしいラベルを書きたい場合は、次のことができます

http://www.google.com
if (searching) {

}
于 2013-01-07T21:20:59.070 に答える
3

これは、ラベル付きステートメントと呼ばれます。scanはここにラベルがあり、ステートメントは に含まれてい{...}ます。

Java 言語仕様 14.7 に準拠

ラベル付きステートメントは、すぐに含まれるステートメントを実行することによって実行されます。ステートメントが識別子によってラベル付けされ、含まれているステートメントが同じ識別子での中断のために突然完了する場合、ラベル付けされたステートメントは正常に完了します。ステートメントの突然の完了の他のすべてのケースでは、ラベル付きステートメントは同じ理由で突然完了します。

于 2013-01-07T21:08:28.290 に答える