Question: I was browsing through some of the base Java objects when I found a section of code surrounded by a `scan: {}` block. The following code is from the toLowerCase() method inside the String class.

```
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;
        }

```

Could someone please explain what the `scan:{}` block is used for and where this syntax comes from? I've yet to see a colon after a word like this in Java unless used in a ternary operator.

Thanks!

Edit: Updated title to correctly match answered question.

Answer: 
Here, `scan:` is simply a [label](http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.7). The `break <label>` syntax allows one to break out of outer loops, and to simulate some forms of the `goto` statement. The syntax is documented in the [JLS](http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.15):

> 
> A `break` statement with label `Identifier` attempts to transfer control to the enclosing labeled statement (§14.7) that has the same `Identifier` as its label; this statement, which is called the break target, then immediately completes normally. In this case, the break target need not be a `switch`, `while`, `do`, or `for` statement.
> 
> 
>
It is a `labeled block.` where **scan:** is a **label**. It is commonly used when breaking/continue in case you have multiple loops. 
In this case `break scan;` simply breaks outta the **labeled block**(scan) when executed.