IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Java 5 Incrément, bloc static et variables


Sujet :

avec Java

  1. #1
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Points : 98
    Points
    98
    Par défaut Java 5 Incrément, bloc static et variables
    Bonjour j'ai les plus grosses peines du monde quand je suis confronté à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int x;
    x++;
    --x;
    ++x;
    Où alors avec les
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    static int x;
    int y;
    {x++;}
    {++y;}
    Je n'arrive jamais à prévoir le résultat, si quelqu'un peut m'aiguiller vers un site, où une liste d'exemples suffisement explicites, voir un ouvrage.

    Bien à vous.

  2. #2
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Points : 98
    Points
    98
    Par défaut
    En fait je me suis basé sur cet exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    class Exemple{
    	int x = 3;
    	static int y = 3;
    	public static void main(String [] args) {
    	int x = 10;
    	int y = 10;
    	Exemple unxemple = new Exemple();
    	unxemple .Imprimer();
    	unxemple .Imprimer(y);
    	}
    	{ x = x+1; }
    	static { y += y;}
    	 void Imprimer() {
    	 System.out.print(++x);
    	 }
    	 void Imprimer(int y) {
    	 System.out.print(" " + ++y);
    	 }
    	 }
    La sortie donne : 5 et 11, je n'arrive pas à comprendre pourquoi. J'aurai volontier pensé que c'esst 11 et 11. Pourquoi qu'une variable dans le main prend le dessus sur une variable globale ?
    Merci pour toute réponse.

    Bien à vous.

  3. #3
    Membre éprouvé Avatar de Jidefix
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    742
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 742
    Points : 1 154
    Points
    1 154
    Par défaut
    Bonjour,
    Petit rappel pour commencer:
    le compilateur java prendra toujours en priorité les variables locales ou les arguments de méthode par rapport aux attributs de classe, qu'ils soient statiques ou non. C'est ce qui permet de faire quelque chose du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    class Test{
     int x;
     public Test(int x){
       this.x=x;//Pour appeller l'attribut on doit préciser le "this.", par défaut on prend la variable locale ou l'argument
     }
     
    }
    Pour les incrémenteurs:
    x++ signifie que x sera incrémenté APRÈS avoir été traité. SI tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int x=4;
    System.out.println(x++);
    Tu imprimeras 4, et APRES la ligne, x aura pour valeur 5
    ++x signifie l'inverse, comme tu l'as compris.
    C'est pareil pour -- soit dit en passant.

    Enfin le dernier point important sont les blocs de codes

    et
    le premier est un bloc statique. Il est appelé une et une seule fois à l'instant ou la classe est chargée par la JVM. En bref, il s'exécute en premier, quoi qu'il arrive.

    Le deuxième est un bloc non statique, il s'éxécute à chaque instanciation de ta classe (new Exemple). Pour la petite histoire il s'éxécute AVANT le constructeur (enfin pas tout à fait mais tu peux considérer ça comme ça dans la très grande majorité des cas)




    Première impression: x
    x commence à 3.
    à l'initialisation de ton Exemple, le bloc {x=x+1} se déclenche => x passe à 4
    à l'appel de "imprimer()", ++x signifie que x est incrémenté AVANT le traitement => x passe à 5, puis la ligne s'exécute => impression de 5
    A noter que la variable locale x du main n'est jamais appelée.

    deuxième impression: y
    il s'agira en revanche ici de la variable locale du main y puisque la méthode imprimer(int y) va traiter l'argument, qui sera fourni dans le main (voir rappel ci-dessus pour voir pourquoi c'est la variable locale qui est prise au lieu de l'attribut)
    Donc:
    y commence à 10. Dans le println, tu fais ++y, ce qui signifie que y est incrémenté AVANT d'être traité.
    => impression de 11
    Veuillez agréer nos sentiments les plus distingués. Soyez assurés de notre entière collaboration, bien à vous pour toujours et à jamais dans l'unique but de servir l'espérance de votre satisfaction, dis bonjour à ton père et à ta mère, bonne pétanque, mets ton écharpe fais froid dehors.

  4. #4
    Membre régulier
    Inscrit en
    Janvier 2007
    Messages
    265
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 265
    Points : 98
    Points
    98
    Par défaut
    Merci pour votre aide.
    Je suis convaincu qu'elle va aider plus d'une personne.

    Bien à vous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 10/04/2008, 19h07
  2. Réponses: 15
    Dernier message: 16/01/2008, 10h04
  3. incrémenter le nom une variable
    Par mederic dans le forum C
    Réponses: 15
    Dernier message: 06/05/2006, 19h11
  4. [Forms 9i] Integrer du code java dans un bloc PL/SQL
    Par mohmanjdo dans le forum PL/SQL
    Réponses: 2
    Dernier message: 07/02/2006, 13h54
  5. [Static] nouvelle question sur les blocs static
    Par Alec6 dans le forum Langage
    Réponses: 2
    Dernier message: 25/11/2004, 18h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo