PDA

View Full Version : [Java] break con etichetta


andbin
21-03-2007, 10:15
Vorrei avere una conferma di una cosa che riguarda l'uso di break con etichetta:

Il Java Language Specification dice:
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 while, do, for, or switch statement. A break statement must refer to a label within the immediately enclosing method or initializer block. There are no non-local jumps.

Cioè dice che il target può anche non essere un while/do/for/switch. Quindi cosa può essere? Ci ho pensato un attimo ... può essere anche un if, un blocco {} o un try. Giusto?? O mi son dimenticato qualcosa?

pisto
21-03-2007, 12:47
adesso non posso fare un test, ma credo di ricordare che una volta avevo messo una label ad una qualunque istruzione, anche non if while etc., e il compilatore l'accettava.

thebol
21-03-2007, 12:52
pippo:{

pluto:{
System.out.println("pre pluto");
break pluto;


}

System.out.println("pre pippo");
break pippo;


}

straordinariamente compila :asd:

il break pluto deve stare all'interno del blocco con la label a cui punta


pippo:{

pluto:{
System.out.println("pre pluto");
break pippo;


}

}

compila ma



pippo:{
System.out.println("pre pluto");
break pluto;

pluto:{


}

}

ovviamente non compila

pisto
21-03-2007, 14:27
continuando a non avere a dispoizione un ide: e con continue che succede? entra nel blocco con l'etichetta?

andbin
21-03-2007, 14:41
continuando a non avere a dispoizione un ide: e con continue che succede? entra nel blocco con l'etichetta?No, un continue con etichetta può solo fare riferimento ad un while/do/for che ha la stessa etichetta e basta (e che ovviamente contiene il continue).


P.S.: grazie per le risposte, a me comunque basterebbe semplicemente avere conferma di quanto detto all'inizio.