java.lang.String的toUpperCase()源代码中的奇怪语法

时间:2013-01-07 21:07:01

标签: java syntax

  

可能重复:
  What is a scan: block in Java?

我浏览了一些Java标准库代码,并在String.java(toUpperCase - JDK 1.6.0_32 x64)中找到了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.
}

3 个答案:

答案 0 :(得分:4)

scan: { ... }

它是Labeled Statements。通常标签用于嵌套循环的情况,您可以在其中断开或继续循环。

例如:

outer:while(cond) {
in:while(cond){
   break outer;
}
}

答案 1 :(得分:3)

它被称为带标签的陈述。 scan在此标注,声明包含在{...}

根据Java Language Specification 14.7

  

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

答案 2 :(得分:3)

即使您没有循环,也可以拥有一个Label(通常在UPPER_CASE中)。 e.g。

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) {

}