Java中的标记语句块?

Java中的标记语句块?,java,syntax,Java,Syntax,我在浏览一些基本Java对象时,发现一段代码被scan:{}块包围。以下代码来自String类中的toLowerCase()方法 scan: { for (firstUpper = 0 ; firstUpper < len; ) { char c = value[firstUpper]; if ((c >= Character.MIN_HIGH_SURROGATE)

我在浏览一些基本Java对象时,发现一段代码被
scan:{}
块包围。以下代码来自String类中的toLowerCase()方法

scan: {
            for (firstUpper = 0 ; firstUpper < len; ) {
                char c = value[firstUpper];
                if ((c >= Character.MIN_HIGH_SURROGATE)
                        && (c <= Character.MAX_HIGH_SURROGATE)) {
                    int supplChar = codePointAt(firstUpper);
                    if (supplChar != Character.toLowerCase(supplChar)) {
                        break scan;
                    }
                    firstUpper += Character.charCount(supplChar);
                } else {
                    if (c != Character.toLowerCase(c)) {
                        break scan;
                    }
                    firstUpper++;
                }
            }
            return this;
        }
扫描:{
for(firstUpper=0;firstUpper=Character.MIN\u HIGH\u代理)

&&(c它是一个
标记的块。
其中扫描:是一个标签。如果有多个循环,通常在断开/继续时使用。
在这种情况下,
break-scan;
在执行时只是将标记的块(scan)断开。

这里,
scan:
只是一个。
break
语法允许一个人断开外部循环,并模拟
goto
语句的某些形式。语法记录在:

带有标签
标识符的
break
语句试图将控制权转移到包含标签的语句中(§14.7)具有与其标签相同的
标识符
;此语句称为中断目标,然后立即正常完成。在这种情况下,中断目标不必是
开关
while
do
for
语句


可以将标签设置为从多个循环中断开/继续

范例

 outer:
 for(int i=...){
   for(int j=..){
     ...
     break outer; // leaves both loops   

   } 

 }

它是一个
标签
。它是流量控制的指示器

如果你看一下你的代码,你会看到下面

 break scan;
发生这种情况时,流将完全退出
scan


顺便说一句,它可以是任何标识符,
scan
根本不是一个关键词。

这种做法和goto的做法一样遭人诟病吗?@Daniel:我不想开始任何宗教辩论。;)但是,因为这种形式可以被认为更“结构化”与原始<代码> Goto 相比,我想一些反<代码> Goto 倡导者可能会认为它不那么令人讨厌。“丹尼尔不,因为你不能用它任意地跳转代码。它在嵌套循环中使用<代码>破解< /CUTE来指定哪个循环要被破解。”你的链接完美地回答了我的问题。为什么我找不到扫描块!再次感谢