Ce qui est une autre fonction pour le goto mot-clé dans Java?
Depuis Java ne dispose pas d'un goto.
Ce qui est une autre fonction pour le goto mot-clé dans Java?
Depuis Java ne dispose pas d'un goto.
Vous pouvez utiliser une étiquette PAUSE déclaration:
search:
for (i = 0; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length; j++) {
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
break search;
}
}
}
Cependant, dans bien conçus code, vous ne devriez pas avoir besoin GOTO fonctionnalité.
Il n'y a pas d'équivalent direct de l' goto
concept en Java. Il y a quelques constructions qui vous permettent de faire certaines des choses que vous pouvez faire avec un classique de la goto
.
break
et continue
états vous permettent de sauter d'un bloc dans une boucle ou d'une instruction switch.break <label>
vous permettent de sauter hors de l'arbitraire d'un composé déclaration à n'importe quel niveau dans une méthode donnée (ou d'initialiseur de bloc).continue <label>
continuer avec la prochaine itération d'une boucle externe à partir d'une boucle interne.return
.Aucun de ces Java constructions de vous permettre de direction vers l'arrière ou vers un point dans le code au même niveau d'imbrication que l'instruction en cours. Ils ont tous sauter un ou plus de nidification (champ d'application) les niveaux et ils ont tous (à part continue
) sauter vers le bas. Cette restriction permet d'éviter le goto "code spaghetti" syndrome inhérente dans le vieux BASIC, FORTRAN et COBOL2.
1 - la partie La plus coûteuse d'exceptions est la création effective de l'objet de l'exception et de ses stacktrace. Si vous avez vraiment, vraiment besoin d'utiliser la gestion des exceptions pour "normal" contrôle de flux, vous pouvez soit préallouer / réutilisation de l'objet de l'exception, ou de créer une classe d'exception personnalisée qui remplace l' fillInStackTrace()
méthode. L'inconvénient est que l'exception de l' printStackTrace()
méthodes ne vais pas vous donner de l'information utile ... si vous avez besoin de les appeler.
2 - Le code spaghetti syndrome a donné naissance à la programmation structurée , où vous limité dans votre utilisation de la langue disponible constructions. Il pourrait être appliqué à BASIC, Fortran et COBOL, mais il nécessitait des soins et de la discipline. Se débarrasser de l' goto
entièrement était un pragmatique meilleure solution. Si vous le gardez dans une langue, il y a toujours un clown qui va en abuser.
Juste pour le plaisir, ici, est un GOTO mise en œuvre en Java.
Exemple:
1 public class GotoDemo { 2 public static void main(String[] args) { 3 int i = 3; 4 System.out.println(i); 5 i = i - 1; 6 if (i >= 0) { 7 GotoFactory.getSharedInstance().getGoto().go(4); 8 } 9 10 try { 11 System.out.print("Hell"); 12 if (Math.random() > 0) throw new Exception(); 13 System.out.println("World!"); 14 } catch (Exception e) { 15 System.out.print("o "); 16 GotoFactory.getSharedInstance().getGoto().go(13); 17 } 18 } 19 }
L'exécutant:
$ java -cp bin:asm-3.1.jar GotoClassLoader GotoDemo 3 2 1 0 Hello World!
Ai-je besoin d'ajouter "ne l'utilisez pas!"?
Alors que certains commentateurs et downvoters soutiennent que ce n'est pas de goto, le bytecode généré à partir du dessous de Java états suggère vraiment que ces déclarations vraiment faire exprès goto sémantique.
Plus précisément, l' do {...} while(true);
boucle dans le deuxième exemple est optimisé par les compilateurs Java afin de ne pas évaluer la condition de la boucle.
label: {
// do stuff
if (check) break label;
// do more stuff
}
En bytecode:
2 iload_1 [check]
3 ifeq 6 // Jumping forward
6 ..
label: do {
// do stuff
if (check) continue label;
// do more stuff
break label;
} while(true);
En bytecode:
2 iload_1 [check]
3 ifeq 9
6 goto 2 // Jumping backward
9 ..
De ne pas être utilisé dans n'importe quelle pièce de logiciel ;-)
Si vous voulez vraiment quelque chose, comme les instructions goto, vous pouvez toujours essayer de briser nommée blocs.
Vous devez être dans le champ d'application de la bloquer à la rupture pour l'étiquette:
namedBlock: {
if (j==2) {
// this will take you to the label above
break namedBlock;
}
}
Je ne vais pas la leçon sur pourquoi vous devriez éviter de goto - je suis en supposant que vous connaissez déjà la réponse à cette question.
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.