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

Java Discussion :

creation de deux objet simultanes


Sujet :

Java

  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 194
    Par défaut creation de deux objet simultanes
    Re bonjour, j ai re une question

    Je dois creer deux objets afin de pouvoir comparer certaines de leurs valeurs

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public class Layer_object {
    	static String layer_name= new String();
    	static String layer_type =new String();
     
            public  Layer_object(Element layer){
    		layer_name = layer.getAttributeValue("name");
    		layer_type = layer.getAttributeValue("type"); 
       }
    }
    Ces valeurs sont contenues dans des balises et attributs Xml

    Mais lorsque je cree mes deux objets

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Layer_object layer_courant_ref = new Layer_object(list1.get(k));
    System.out.println(layer_courant_ref.layer_name())
     
    Layer_object layer_courant_itf = new Layer_object(list2.get(l));
    System.out.println(layer_courant_ref.layer_name());
    Lors du premier System.out, la veleur de "layer_courant_ref.layer_name()" est correct mais lors du second System.out, mon "layer_courant_ref.layer_name()" a la valeur de mon deuxieme objet. Je ne peux donc pas les compqrer puisque layer_courant_ref.layer_name() = layer_courant_ref.layer_name()
    alors qu ils devraient etre different.

    Pourquoi lors de la creation de mon deuxieme objet, celui ci ecrase les valeurs du premier ?

  2. #2
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    Citation Envoyé par delta07 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Layer_object layer_courant_ref = new Layer_object(list1.get(k));
    System.out.println(layer_courant_ref.layer_name())
    		
    Layer_object layer_courant_itf = new Layer_object(list2.get(l));
    System.out.println(layer_courant_ref.layer_name());
    Si j'ai bien suivi c'est ça que tu veux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Layer_object layer_courant_ref = new Layer_object(list1.get(k));
    System.out.println(layer_courant_ref.layer_name())
    		
    Layer_object layer_courant_itf = new Layer_object(list2.get(l));
    System.out.println(layer_courant_itf.layer_name());

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Pourquoi tes attributs sont-ils définis en static ?

    a++

  4. #4
    Membre Expert
    Inscrit en
    Août 2009
    Messages
    1 073
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 1 073
    Par défaut
    C'est très simple, tu déclares des attributs static. Autrement dit, ils sont communs à toute ta classe, donc quelle que soit l'instance que tu utilises, ça sera les même valeurs.

    Peut-être voulais tu simplement dire qu'une fois instanciées, ces valeurs ne doivent pas changer ? Auquel cas le mot-clé à utiliser est final.

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 194
    Par défaut
    ok je viens de changer static en public.J ai encore beaucoup de mal avec toutes ces notions.
    J avais mis static pour avoir les getters et les setters car mon prof m avais appris comme ca :/
    Je n ai certainement pas tout compris

    Cependant pourquoi mettre "final"?
    si j ai bien compris :
    static => si la valeur change quelque part, elle changera pour tous les objets
    public => une valeur (differentes) par objet, accessible a tous
    final => ? (valeur jamais modifiable ? une constante ?)

    Sinon merci de votre aide, une fois de plus je dormira moins niais ce soir

  6. #6
    Membre chevronné
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Par défaut
    @adiGuba : bien vu j'avais pas fait gaffe au static

    @delta07 :
    Le final signifie que tu ne pourras plus modifier la référence après l'instanciation. Pour une chaine on peux effectivement assimiler ça à une constante.

    Tu te trompes pour public, rien avoir avec static et/ou final, public signifie je peux voir/accéder à l'attribut de n'importes où (regardes dans la FAQ je crois que c'est assez bien expliqué)

  7. #7
    Membre Expert
    Inscrit en
    Mai 2006
    Messages
    1 364
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 1 364
    Par défaut
    Petit rappel sur ces notions importantes :
    static => Variable qui n'est instanciée qu'une fois quelque soit le nombre d'instances de la classe. Cette valeur est commune à toutes les instances.

    public => Variable accessible depuis la classe elle meme (avec this->maVariable), par les heritiers de la classe (avec this->maVariable) et par n'importe quelle autre classe (avec instance.maVariable)

    protected => Variable accessible depuis la classe elle meme (avec this->maVariable), par les heritiers de la classe (avec this->maVariable) mais pas par n'importe quelle autre classe (instance.maVariable ne marche pas)


    private => Variable accessible depuis la classe elle meme (avec this->maVariable) pas par les heritiers de la classe (this->maVariable ne marche pas) et pas par n'importe quelle autre classe (instance.maVariable ne marche pas)

    final => Variable qui ne peut etre modifiée que dans le constructeur de la classe.

    A noter que private/protected/public soit exclusifs mais que chacun peut etre additionné à static et/ou final.

    a+

  8. #8
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2009
    Messages : 194
    Par défaut
    ok super, comme d habitude merci a vous

    Je vais evidement relire tout ca de plus pres et demander quelques precision a mon prof qui ne nous a pas bien explique tout cela.

  9. #9
    Membre chevronné
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Par défaut
    Bonjour,

    Les rappels de hwoarang sont bienvenus. J'y ajoute quelques nuances.

    Citation Envoyé par hwoarang Voir le message
    Petit rappel sur ces notions importantes :
    static => Variable qui n'est instanciée qu'une fois quelque soit le nombre d'instances de la classe.
    Une variable static peut être instanciée autant de fois que l'on veut.
    C'est le modifier final qui limite à un le nombre d'affection ou d'instantation.

    Citation Envoyé par hwoarang Voir le message
    final => Variable qui ne peut être modifiée que dans le constructeur de la classe.
    Un champ d'instance avec un modifier final ne doit pas se contenter de ne pas être modifier après la construction de l'objet. Il doit obligatoirement être valorisé une et une seule fois lors de la création de l'objet possédant la propriété sinon erreur de compilation.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/06/2009, 16h39
  2. Problème pour faire bouger deux objets simultanement
    Par LinuxUser dans le forum AWT/Swing
    Réponses: 13
    Dernier message: 22/04/2007, 23h19
  3. Réponses: 5
    Dernier message: 08/01/2006, 23h42
  4. [vector] Partager une même variable entre deux objets.
    Par Ekinoks dans le forum SL & STL
    Réponses: 18
    Dernier message: 25/08/2005, 20h40
  5. Afficher deux objets superposés C++ Builder 6
    Par nicoistia dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/03/2004, 15h09

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