** Les étiquettes ** en Java sont généralement attachées aux instructions de boucle (instruction do, instruction for, instruction while).
LOOP1:for (String str1 : list1) { //Étiqueté pour déclaration
for (String str2 : list2) {
if (str1.equals(str2)) {
found(str1);
break LOOP1; //Sortez de l'extérieur pour
}
}
}
Ensuite, est-il possible d'étiqueter des instructions autres que des instructions de boucle **?
** 3. Dans certains cas, une instruction autre que l'instruction de boucle peut être étiquetée, et dans certains cas, une instruction qui fait référence à l'étiquette peut être écrite. ** **
La plupart des instructions Java peuvent être étiquetées.
//Formule étiquetée!
FOO: a = 42; // OK
//Étiquette if instruction!
BAR: if (a > 0) b = 1;
else b = -1; // OK
[^ statement-1]: dans la définition de format dans la spécification du langage Java, l'instruction correspondant à "Statement" est étiquetée. L'instruction de déclaration de variable locale («LocalVariableDeclarationStatement») n'est pas un type de «Statement».
Erreur de compilation
//Instruction de déclaration de variable étiquetée??
FOO: int a = 42; // NG!
Ensuite, lorsque l'instruction de bloc et l'instruction de contrôle (y compris non seulement la boucle, mais aussi l'instruction if et l'instruction try) auxquelles l'instruction de bloc est subordonnée sont étiquetées (par exemple, LABEL:
), interrompre le bloc. Vous pouvez sortir de l'instruction avec
LABEL:en exécutant LABEL;
.
FOO: if (val > 1000) { //Étiquette if instruction!
big = true;
if (val % 2 == 0) break FOO; //Sortez du bloc
bigOdd = true;
}
Par exemple, il peut être utilisé lorsque vous souhaitez "échapper tôt" à une zone spécifique dans une fonction.
BLOCK:{ //Bloc simple
Foo foo1 = stor.findFoo(fooName1);
if (foo1 == null)
break BLOCK; //Sortez du bloc
Foo foo2 = stor.findFoo(fooName2);
if (foo2 == null)
break BLOCK; //Sortez du bloc
foo2.setBar(foo1.getBar());
//Après cela, le processus se poursuit sans fin...
}
En fait, il semble que vous puissiez écrire une instruction break qui fait référence à une étiquette attachée à une instruction sans blocs.
FOO: break FOO; // OK!!!!
Eh bien, ce n'est pas du tout utile ...