用Java标记语句块?

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

 scan: { for (firstUpper = 0 ; firstUpper = 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; } 

有人可以解释一下scan:{}块用于什么以及此语法来自何处? 除非在三元运算符中使用,否则我还没有在Java中看到像这样的单词之后的冒号。

谢谢!

编辑:更新标题以正确匹配已回答的问题。

在这里, scan:只是一个标签 。 break 语法允许打破外部循环,并模拟goto语句的某些forms。 JLS中记录了语法:

带有标签Identifier break语句尝试将控制转移到与其标签具有相同Identifier的封闭标签语句(第14.7节); 此语句称为中断目标,然后立即正常完成。 在这种情况下,中断目标不必是switchwhiledofor语句。

这是一个labeled block. 其中scan:是一个标签 。 如果你有多个循环,它通常在断开/继续时使用。 在这种情况下break scan; 在执行时简单地打破标记的块 (扫描)。

您可以设置标签以在多个循环内打破/或继续。

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

这是一个label 。 它是流量控制的指标。

如果您查看代码,请参阅下文

  break scan; 

发生这种情况时,流完全退出scan块。

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