119 votes

« boucle : » dans le code Java. Qu’est-ce, pourquoi il compile ?

Ce code vient de me faire regarder mon écran pendant quelques minutes :

(ligne 137 ici)

Je n’ai jamais vu ça avant, et je n’avais aucune idée Java a un mot clé « loop » (Netbeans ne même couleur comme un mot clé), et il ne compile pas très bien avec le JDK 6.

Quelqu'un peut-il expliquer cela à moi ?

211voto

Jigar Joshi Points 116533

Ce n'est pas un keyword c'est label.

Utilisation:

label1:
for(){
  label2:
  for(){
      if(condition1)
      break label1;//break outerloop

      if(condition2)
      break label2;//break innerloop
  }
}

De la Documentation.

74voto

Rob Di Marco Points 18048

Comme d'autres affiches ont dit, c'est un label, pas un mot-clé. À l'aide d'étiquettes vous permet de faire des choses comme

outer: for(;;) {
   inner: for(;;) {
     break outer;
   }
}

Cela permet de rompre la boucle externe.

EDIT: Avec le lien vers la documentation

31voto

Sean Patrick Floyd Points 109428

La réponse à la question, mais comme une note de côté:

J'ai entendu parler de questions d'entrevue à la "Pourquoi est-ce java code valide" (dépouillé le plus simple exemple, voici le plus méchant, thx Tim Büthe):

url: http://www.myserver.com/myfile.mp3
downLoad(url);

Voulez-vous le savez tous ce que ce code est (en dehors de terrible)?

Solution: deux étiquettes, url et http, un commentaire www.myserver.com/myfile.mp3 et un appel de méthode avec un paramètre qui a le même nom (url) que le label. Yup, cette compile (si vous définissez l'appel de la méthode et de la variable locale ailleurs).

16voto

Michael Borgwardt Points 181658

Ce n'est pas un mot clé, c'est une étiquette. Il est destiné à être utilisé avec l' break et continue mots-clés à l'intérieur de boucles imbriquées:

outer:
for(;;){
    inner:
    for(;;){
        if(){
            break inner; // ends inner loop
        } else {
            break outer; // ends outer loop
        }
    }
}

5voto

codaddict Points 154968

Ce n'est pas un mot-clé, c'est un label.

Elle permet d'aller un étiquetés pause et étiquetés continuer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X