1

可能重复:
什么是扫描:Java 中的块?

我正在浏览一些 Java 标准库代码,并在 String.java ( -JDK 1.6.0_32 x64)中找到了该toUpperCase方法。java.lang.String我在下面的代码片段中删除了不相关的代码部分。

让我感到困惑的部分是scan: { ... }语法。我的印象是 lambda 表达式不是 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: { ... }

它是一个带标签的语句。通常在嵌套循环的情况下使用标签,您可以中断或继续循环。

例如:

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

它被称为标记语句。scan此处为标签,语句包含在{...}.

根据Java 语言规范 14.7

通过执行立即包含的 Statement 来执行带标签的语句。如果语句由标识符标记,并且包含的​​语句由于使用相同标识符的中断而突然完成,则标记语句正常完成。在语句突然完成的所有其他情况下,带标签的语句出于相同的原因突然完成

于 2013-01-07T21:08:28.290 回答
3

即使您没有循环,您也可以有一个标签(通常在 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 回答