[JAVA] Les instructions autres que les boucles peuvent-elles être étiquetées?

problème

** 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 **?

  1. Les instructions autres que les instructions de boucle ne peuvent pas être étiquetées (une erreur de compilation se produira).
  2. Dans certains cas, des instructions autres que des instructions de boucle peuvent être étiquetées, mais cela n'a pas de sens après tout parce qu'une instruction qui fait référence à cette étiquette ne peut pas être écrite.
  3. Dans certains cas, des instructions autres que des instructions de boucle peuvent être étiquetées, et dans certains cas, des instructions qui font référence à l'étiquette peuvent être écrites.

jaba-2.png

Bonne réponse

** 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. ** **

Commentaire

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...
}

Supplément

Serpentin

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 ...

Recommended Posts

Les instructions autres que les boucles peuvent-elles être étiquetées?
Scala String peut être utilisé pour plus que de simples méthodes java.lang.String
Méthodes de tableau Ruby pouvant être utilisées avec Rails (autres que chacun)