Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Please explain the usage of Labeled Statements

  • Is breaking and continuing the only uses of labeled statements in Java?
  • When have you used Labeled Statements in your programs?

Sorry the code snippet has been deleted. I am splitting the question

like image 394
unj2 Avatar asked Apr 25 '10 23:04

unj2


People also ask

What is labeled statement?

labeled-statement: identifier : statement. A statement label is meaningful only to a goto statement; in any other context, a labeled statement is executed without regard to the label. A jump-statement must reside in the same function and can appear before only one statement in the same function.

What are labeled statements in C explain with the help of suitable example?

Labeled statement syntaxThe label consists of the identifier and the colon ( : ) character. A label name must be unique within the function in which it appears. In C++, an identifier label can only be used as the target of a goto statement. A goto statement can use a label before its definition.

What is labeled statement in Swift?

Swift provides labeled statement that can be applied to flow control elements (conditional or loop statements like if, for, while and repeat-while) and can be used as a location specifier for continue and break . To create a label, simply add a string followed by colon before the statement it will refer to.

What are labels in C language?

In C a label identifies a statement in the code. A single statement can have multiple labels. Labels just indicate locations in the code and reaching a label has no effect on the actual execution.


1 Answers

JLS 14.7 Labeled statements

(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 with break (§14.15) or continue (§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 :

  • print "One (1)" on 1
  • print "Two (2)" on 2
  • print "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:

  • The different numbers are processed in a switch
  • Unlabeled break in the switch is used to avoid "fall-through" between cases
  • Labeled continue loop; is used to skip post-processing on case 0: (the label is not necessary here)
  • Labeled 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.

like image 110
polygenelubricants Avatar answered Oct 06 '22 00:10

polygenelubricants