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

Langage Java Discussion :

Mot-clé static


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Par défaut Mot-clé static
    Bon, j'ai beau lire les explications dans mes bouquins ou dans les FAQ, je ne comprends pas bien à quoi correspond le mot clé statique, ou plutôt, quand est ce qu'il est nécessaire.
    Par exemple, j'ai une classe PopUp qui affiche une fenetre à l'écran et l'utilisateur peut entrer du texte. Je récupère ce texte dans une variable texte que j'ai déclarée privée. Je crée aussi la méthode getTexte() pour pouvoir avoir accès à la valeur de cette variable.
    Dans une autre classe, Principale on va dire, je crée un Objet PopUp et je crée derrière une variable String text = PopUp.getTexte(); Et là, vous vous en doutez, j'ai le message d'erreur Cannot make a static reference to the non-static method getTexte() from the type PopUp. Donc je mets ma méthode en static et la variable texte aussi. Et ça marche. Mais je NE COMPRENDS PAS pourquoi je dois le faire :/ J'ai beau lire l'aide partout, je pige pas

    Si une bonne âme pouvait m'aiguiller sur la voie, ça serait bien charitable

  2. #2
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    Citation Envoyé par Zanton
    String text = PopUp.getTexte();
    Ce qu'il faudrait faire c'est plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    PopUp uneInstance = new PopUp();
    String maValeur = uneInstance.getTexte();
    // avec la méthode getText & la variable text (dans la classe PopUp) NON static

    Pour info...
    Le modificateur static permet de déclarer une variable, une méthode de classe ou un intialisateur statique, c'est-à-dire que le membre demeure disponible dans une classe entière plutôt que dans un objet spécifique.
    http://java.sun.com/docs/glossary.html#S
    static
    A Java keyword used to define a variable as a class variable. Classes maintain one copy of class variables regardless of how many instances exist of that class. static can also be used to define a method as a class method. Class methods are invoked by the class instead of a specific instance, and can only operate on class variables.

    static field
    Another name for class variable.

    static method
    Another name for class method.

    class variable
    A data item associated with a particular class as a whole--not with particular instances of the class. Class variables are defined in class definitions. Also called a static field. See also instance variable.

    class method
    A method that is invoked without reference to a particular object. Class methods affect the class as a whole, not a particular instance of the class. Also called a static method. See also instance method.

  3. #3
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    Salut,

    En clair par l'exemple :
    Une variable ou fonction définie en static :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Test
    {
      public static int n=100
      public static void test()
      {
        System.out.println(Test.n);
      }
    }
    Eh bien cette variable / fonction est accessible simplement ne faisant et non en étant obligé d'instancier un objet Test.

    voila j'espere que la pratique est plus claire que la théorie ^^

    mavina

  4. #4
    Expert confirmé
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Par défaut
    Citation Envoyé par mavina
    Salut,

    En clair par l'exemple :
    Une variable ou fonction définie en static :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    class Test
    {
      public static int n=100
      public static void test()
      {
        System.out.println(Test.n);
      }
    }
    Eh bien cette variable / fonction est accessible simplement ne faisant et non en étant obligé d'instancier un objet Test.

    voila j'espere que la pratique est plus claire que la théorie ^^

    mavina
    Je complète juste en disant que ce n'est pas qu'une question d'accessibilité, le fait de déclarer une variable en statique, fait que cette variable est la même pour toutes les instances de cette classe, donc si on la chance dans une instance, elle va changer dans toutes les autres.

  5. #5
    Membre éprouvé
    Avatar de mavina
    Homme Profil pro
    Développeur Java
    Inscrit en
    Octobre 2004
    Messages
    1 812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Chine

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 812
    Par défaut
    c'est d'ailleurs pour ça que le main est déclaré en static, parcequ'il est pareil pour chaque instance de la classe qui l'invoque ...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 117
    Par défaut
    Très bien, j'ai compris je pense J'ai fait quelques tests et je crois avoir assimilé la logique du truc

    Juste une précision mavina : dans ton exemple, je peux accéder à ta variable n depuis une autre classe (c'était le but de l'exemple d'ailleurs) mais en réalité, il vaut mieux mettre la variable private et faire appel à une methode getVar() pour récupérer sa valeur ?

    g_rare : ton premier exemple ne fonctionne pas. En fait, c'est exactement ce que j'avais fait et j'ai eu le message d'erreur à propos de static, et c'est notamment ce qui m'a poussé à poster ici après avoir cherché dans les docs (que tu me redonnes après d'ailleurs si j'ai posté, c'est justement parceque je ne les trouvais pas clair ). Mais merci de ton aide

    Merci pour vos précisions, ça se précise bien dans ma tête tout ça

  7. #7
    Membre expérimenté Avatar de @ldehan
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Par défaut
    Citation Envoyé par mavina
    c'est d'ailleurs pour ça que le main est déclaré en static, parcequ'il est pareil pour chaque instance de la classe qui l'invoque ...
    parce que les autres methodes elles sont différentes en fonction de qui les appelle ? ? ?

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

Discussions similaires

  1. Utilisation du mot-clef "static"
    Par sir_gcc dans le forum Langage
    Réponses: 3
    Dernier message: 16/04/2007, 11h18
  2. mot clé static
    Par salseropom dans le forum C
    Réponses: 5
    Dernier message: 28/02/2007, 14h23
  3. Question sur l'utilisation du mot réservé static
    Par flash2590 dans le forum Langage
    Réponses: 4
    Dernier message: 10/04/2006, 00h20
  4. mot-clef static
    Par keil dans le forum C++
    Réponses: 8
    Dernier message: 25/01/2006, 17h11

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