en utilisant des étiquettes en Java sans "boucles"
J'ai toujours pensé que les étiquettes doivent être utilisés uniquement avec des boucles, mais il ne semble pas. En leur donnant le code:
public class LabelTest {
public static void main(String[] args) {
label1: System.out.println("");
label2: LabelTest t = new LabelTest();
}
}
Lors de la compilation ligne intitulée "label1" compile mais le code à "label2" donne des erreurs. Pourquoi? Et pourquoi voudrais-je à l'étiquette qui ne sont pas des "boucles"?
source d'informationauteur szymond
Vous devez vous connecter pour publier un commentaire.
Vous obtenez une erreur parce qu'une étiquette ne peut pas être appliqué pour les déclarations de variables, c'est juste la façon dont la langue de la grammaire est défini (une étiquette ne peut précéder un
Statement
et unLocalVariableDeclarationStatement
n'est pas unStatement
). La raison en est probablement qu'il pourrait causer de la confusion concernant la portée des variables. Cela fonctionne:À ajouter à Michael Borgwardt réponse, vous pouvez faire des choses comme ça pour des raisons de commodité (je viens de découvrir ce que l'autre jour, lors de la lecture par le biais de la Java rt.jar le code source):
Maintenant, c'est logiquement équivalent à:
Mais, vous avez à ignorer une partie de l'accolades (et des indentations qui viennent avec des accolades). Peut-être qu'il ressemble plus propre (il n'est à mon avis), et il y a certains endroits où ce style de codage peut être approprié et moins à confusion.
Ainsi, vous pouvez utiliser des étiquettes au-delà de boucles tout, et même au-delà de
if
consolidés. Par exemple, ceci est valable syntaxe Java (et peut-être vous pourrait évoquer une raison pour faire quelque chose comme ça):Si le
break
est exécuté ici, l'exécution saute à la fin du bloc indiqué par l'étiquette, etstatementFive()
etstatementSix()
obtenir sauté.L'utilité de ce style (sans
if
déclaration) devient de plus en plus évident lorsque vous avez des blocs à l'intérieur des blocs où vous devez sauter. En général, vous pouvez tout faire avec assez intelligent pour utiliser des boucles. Cependant, il existe quelques cas où des étiquettes sans boucles de faire pour faciliter la lecture du code. Par exemple, si vous avez besoin de façon séquentielle de vérifier les paramètres, vous pouvez soit le faire ou lever une exception. Il finit par être une question de propreté du code et le style personnel.Il ne compile pas. Bonne question!
J'ai juste joué un peu avec votre extrait de code. Il semble que le compilateur s'attend à un appel de méthode ou de l'exploitant après l'étiquette. Il ne permet pas l'attribution à ce point.
Je pense que le fait que l'étiquette n'est pas interdit avant d'autres opérateurs que pour, while et do est probablement un bug (?!) de compilateur java de spécification. De toute façon il n'est pas si critique. Cela ne me dérange pas (personnellement).
Java syntaxe est basée sur la syntaxe du C.
En C, vous pouvez mettre une étiquette de n'importe où (et pas seulement sur les boucles) et ensuite utiliser
goto
pour sauter l'exécution de cette ligne. Maintenant,goto
n'a pas été implémentée en Java, mais les étiquettes ont été laissés de sorte qu'ils peuvent être utilisés en combinaison avecbreak
oucontinue
.Il n'est pas important puisque ce n'est pas une utilisation standard des étiquettes de toute façon. À l'aide d'étiquettes avec
continue
oubreak
est assez mauvais (la plupart du temps). Les utiliser librement est également inutile.Reportez-vous à l'Étiquette en JLS