Sorry the code snippet has been deleted. I am splitting the question
(edited for clarity)
Statements may have label prefixes (Identifier : Statement). The Identifier is declared to be the label of the immediately contained Statement.
Unlike C and C++, the Java programming language has no
goto
statement; identifier statement labels are used withbreak
(§14.15) orcontinue
(§14.16) statements appearing anywhere within the labeled statement.
So the JLS is clear that labels are used with break
or continue
, and no other grammatical element of the Java programming language uses it.
Strictly speaking, break
and continue
, labeled or not, are NEVER necessary. They can always be written out of the code. Used idiomatically, however, they can lead to more readable code.
Here's an illustrative example: given an int[]
, we want to :
"One (1)"
on 1
"Two (2)"
on 2
"Zero "
on 0
immediately stop processing on any other number
int[] arr = { 1, 2, 0, 1, -1, 0, 2 };
loop:
for (int num : arr) {
switch (num) {
case 1:
System.out.print("One ");
break;
case 2:
System.out.print("Two ");
break;
case 0:
System.out.print("Zero ");
continue loop;
default:
break loop;
}
System.out.print("(" + num + ") ");
}
// prints "One (1) Two (2) Zero One (1) "
Here we see that:
switch
break
in the switch
is used to avoid "fall-through" between casescontinue loop;
is used to skip post-processing on case 0:
(the label is not necessary here)break loop;
is used to terminate the loop on default:
(the label is necessary here; otherwise it's a switch break
)So labeled break
/continue
can also be used outside of nested loops; it can be used when a switch
is nested inside a loop. More generally, it's used when there are potentially multiple break
/continue
target, and you want to choose one that is not immediately enclosing the break
/continue
statement.
Here's another example:
morningRoutine: {
phase1: eatBreakfast();
if (grumpy) break morningRoutine;
phase2: kissWife();
phase3: hugChildren();
}
http://stackoverflow.com is the best website ever!
Here's another case of a labeled break
being used not within an iterative statement, but rather within a simple block statement. One may argue that the labels lead to better readability; this point is subjective.
And no, the last line DOES NOT give compile time error. It's actually inspired by Java Puzzlers Puzzle 22: Dupe of URL. Unfortunately, the puzzle does not go into "proper" use of labeled statements in more depth.