Quel est l’intérêt d’utiliser des instructions étiquetées en Java?

Je suis occupé à étudier pour ma certificateion et je suis tombé sur un concept que je n’avais jamais entendu auparavant – “Déclarations étiquetées”. par exemple:

‘label’: ‘statement’

L1: while(i < 0){ L2: System.out.println(i); } 

Donc ma question est .. pourquoi? En quoi cela est-il utile et quand voudrait-on utiliser quelque chose comme ça?

La seule utilisation que je connaisse est que vous pouvez utiliser des étiquettes dans des instructions break ou continue . Donc, si vous avez des boucles nestedes, c’est un moyen de sortir de plus d’un niveau à la fois:

 OUTER: for (x : xList) { for (y : yList) { // Do something, then: if (x > y) { // This goes to the next iteration of x, whereas a standard // "continue" would go to the next iteration of y continue OUTER; } } } 

Comme l’exemple l’implique, il est parfois utile d’effectuer une itération nestede de deux éléments à la fois (par exemple, la recherche de correspondances) et de poursuivre – ou si vous effectuez une itération normale, mais pour une raison quelconque, souhaitez interrompre / continuer dans une boucle nestede.

Cependant, j’ai tendance à ne les utiliser qu’une fois tous les deux ou trois ans. Ils peuvent être difficiles à comprendre, car ils constituent un concept rarement utilisé. J’éviterai donc d’utiliser des étiquettes si le code peut être écrit clairement d’une autre manière.

Il peut être utilisé pour éviter la nécessité d’un indicateur “non trouvé”.

 FOUND: { for(Type t: list) if (t.isTrue()) break FOUND; // handle not found. } 

C’est peut-être un mauvais usage des étiquettes, mais vous pouvez les utiliser pour casser sans une boucle.

 LABEL: { if(condition) break LABEL; // do something } 

Il peut également être utilisé pour dérouter les gens, ce qui est une bonne raison de l’éviter. 😉

 http://www.google.com while(true) break http; 

J’avais l’habitude de les utiliser comme commentaires. 🙂 Blagues à part, c’est comme les instructions Go to en Basic, ce qui vous permet de passer à une ligne de code, c’est-à-dire lors d’une structure en boucle profonde …

Usage:

 scan: { int c; for (firstUpper = 0 ; firstUpper < count ; firstUpper += Character.charCount(c)) { c = codePointAt(firstUpper); if (c != Character.toLowerCase(c)) { break scan; } } return this; } 

Voici un exemple de break excessive qui risque d’être omise par le rest des réponses. Il permet de casser une boucle dans l’instruction switch {}:

 loop: for(;;){ int c=in.read(); switch(c){ case -1: case '\n': break loop; case 'a': processACommand(); break; case ... default: break; } } 

Je pense qu’ils sont nécessaires pour que vous puissiez écrire Fortran tout en prétendant écrire Java. Sans eux, l’aphorisme que les vrais programmeurs écrivent dans Fortran quelle que soit la langue qu’ils utilisent pourrait être invalidé.

Comme d’autres réponses l’ont indiqué, les étiquettes sont une partie rarement utilisée du langage Java.

Mais dans votre cas, d’autres choses devraient être considérées:

  • Les étiquettes sont assez “génériques” et sont en fait des numéros de ligne: L1 , L2 , …

  • Les étiquettes ne sont pas utilisées dans le code.

  • Vous étudiez du matériel pour une certificateion.

Cela signifie que les étiquettes L1 , L2 sont simplement des numéros de ligne. Je suppose que le texte expliquant le code fait référence à ces numéros de ligne. De même, certains livres et articles énumèrent tous les termes mathématiques uniquement pour les référencer dans le texte ou pour faciliter les citations.