Signaler

Bloc de controle en Java

Posez votre question anaurel 19Messages postés vendredi 26 mai 2017Date d'inscription 23 juin 2017 Dernière intervention - Dernière réponse le 19 juin 2017 à 15:40 par anaurel
Bonjour,
Exite -il une instruction du genre << go to de Fortran >> en Java en dehors de des blocs if et switch?


Afficher la suite 
Utile
+0
plus moins
Bonjour,

Les goto historiques sont incompatibles avec la programmation procédurale (appels de méthodes) et encore plus avec la programmation objet.

Il existe cependant un mécanisme de label en Java qui permet de faire des break/continue plus avancés, mais c'est la seule chose que l'on puisse faire en Java qui se rapproche vaguement à un goto.

Exemple :

toto: for (int[] array : matrix) {
          for (int id : array) {
              if (id < 0) {
                  break toto;
              }
          }
      }
anaurel 19Messages postés vendredi 26 mai 2017Date d'inscription 23 juin 2017 Dernière intervention - 19 juin 2017 à 14:41
je veux comprendre un peu comment ceci marche
Répondre
KX 14437Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 24 juin 2017 Dernière intervention - 19 juin 2017 à 14:43
Voir la documentation :
https://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html
Répondre
anaurel 19Messages postés vendredi 26 mai 2017Date d'inscription 23 juin 2017 Dernière intervention - 19 juin 2017 à 15:40
ok merci
Répondre
Donnez votre avis
Utile
+0
plus moins
Pour aller plus loin :
Au delà du langage de programmation Java, il y a la machine virtuelle qui interprète le bytecode (qu'il soit issu d'un code Java ou d'un autre langage compatible) et dans les instructions utilisables par la JVM il y a le goto.

https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings

C'est une instruction assez courante dans les bytecode que l'on obtient après la compilation d'un code source Java.

Exemple : voici la méthode equals() de la classe Object en Java.

    public boolean equals(Object obj) {
        return (this == obj);
    }

Une fois compilé voici le bytecode obtenu, avec
goto 10
sur l'instruction 6 (ce qui permet d'éviter la section "else" du if).

  // Method descriptor #12 (Ljava/lang/Object;)Z
  // Stack: 2, Locals: 2
  public boolean equals(java.lang.Object arg0);
     0  aload_0 [this]
     1  aload_1 [arg0]
     2  if_acmpne 9
     5  iconst_1
     6  goto 10
     9  iconst_0
    10  ireturn
    Stack map table: number of frames 2
        [pc: 9, same]
        [pc: 10, same_locals_1_stack_item, stack: {int}]
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !