用Java标记语句块?

Fal*_*ter 10 java syntax

当我发现一个由scan: {}块包围的代码段时,我正在浏览一些基础Java对象.以下代码来自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;
        }
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下该scan:{}块的用途以及该语法的来源吗?除非在三元运算符中使用,否则我还没有在Java中看到像这样的单词之后的冒号.

谢谢!

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

NPE*_*NPE 16

这里scan:只是一个标签.该break <label>语法允许一个打破外循环,并模拟一些形式的goto声明.JLS中记录了语法:

break带有标签的语句Identifier尝试将控制权转移到Identifier与其标签相同的封闭标签声明(第14.7节); 此语句称为中断目标,然后立即正常完成.在这种情况下,突破目标不一定是switch,while,do,或for语句.

  • @Daniel:我不想开始任何宗教辩论.;)然而,由于这种形式可以被认为比原始的"goto"更"结构化",我想象一些反"goto"的拥护者可能会认为它不那么令人讨厌. (2认同)