用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节); 此语句称为中断目标,然后立即正常完成。 在这种情况下,中断目标不必是switch
,while
,do
或for
语句。
这是一个labeled block.
其中scan:是一个标签 。 如果你有多个循环,它通常在断开/继续时使用。 在这种情况下break scan;
在执行时简单地打破标记的块 (扫描)。
您可以设置标签以在多个循环内打破/或继续。
例
outer: for(int i=...){ for(int j=..){ ... break outer; // leaves both loops } }
这是一个label
。 它是流量控制的指标。
如果您查看代码,请参阅下文
break scan;
发生这种情况时,流完全退出scan
块。
顺便说一句,它可以是任何标识符, scan
根本不是关键字。