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 :

Variable statique locale


Sujet :

avec Java

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Points : 67
    Points
    67
    Par défaut Variable statique locale
    bonsoir tout le monde ,
    pourquoi ne peut-on pas déclarer une variable static dans la méthode main ?? :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Test {
        public static void main(String args[]){
            static int x = 0;
            System.out.println(x);
        }
    }

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Parce qu'une variable locale statique, ça ne veut rien dire et donc ça n'existe pas.

    Si tu cherches à reprendre le concept du C, sache que ce ne sont que des variables globales qui ont été déclarées à l'intérieur de la fonction au lieu d'être déclarées normalement.

    En Java il n'y a pas de variable globale, mais tu peux utiliser une variable membre statique à la place. Et on ne peut pas les déclarer à l'intérieur d'une méthode, seulement à l'extérieur.

  3. #3
    Membre averti Avatar de coshibe
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 183
    Points : 406
    Points
    406
    Par défaut
    Pour le mot clé static je t'invite à cliquer sur ce lien

    Mais en bref et en clair dans le texte, ca veut dire que dans le cas d'une methode, elle ne sera exécutée qu'une fois(typiquement la methode main est static). Dans le cas d'une variable static cela veut surtout dire qu'elle est commune à tous les éléments de ta classe. Donc tu ne peux pas déclarer une variable statique au sein d'une méthode.

    Tu as peut etre aussi deja vu dans eclipse :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final long serialVersionUID;
    c'est un id auto généré et incrémenté à chaque changement de ta classe.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Points : 67
    Points
    67
    Par défaut
    Si tu cherches à reprendre le concept du C, sache que ce ne sont que des variables globales qui ont été déclarées à l'intérieur de la fonction au lieu d'être déclarées normalement.
    En C si on déclare une variable statique dans une fonction est-ce sera visible pour les autres fonctions ?

    En Java il n'y a pas de variable globale, mais tu peux utiliser une variable membre statique à la place. Et on ne peut pas les déclarer à l'intérieur d'une méthode, seulement à l'extérieur.
    Merci pour cet éclaircissement.

    Pour le mot clé static je t'invite à cliquer sur ce lien
    J'ai compris en ce qui concerne le mot static devant une méthode mais le mot satic devant un bloc c'est la que je me suis planté. j'ai pas bien saisi le code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class MaClasse{
       public static Map uneVariableStatique = new HashMap();
       static{
          uneVariableStatique.put("une clef","une valeur");
          uneVariableStatique.put("une autre clef","une autre valeur");
          //etc .
       }
    }
    c'est quoi Map ?
    le HashMap est-ce un constructeur par défaut et que fait-il au juste ?
    la méthode put sert à quoi ?

    Tu as peut etre aussi deja vu dans eclipse :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final long serialVersionUID;
    c'est un id auto généré et incrémenté à chaque changement de ta classe.
    Je travaille pas avec Eclipse, pour le moment j'utilise Netbeans mais quand même c'est une remarque géniale. vous voulez dire quoi par "changement de ta classe" ?


    Merci pour vos réponses si précieuses.

  5. #5
    Membre averti Avatar de coshibe
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 183
    Points : 406
    Points
    406
    Par défaut
    Citation Envoyé par khaled_prg Voir le message
    J'ai compris en ce qui concerne le mot static devant une méthode mais le mot satic devant un bloc c'est la que je me suis planté. j'ai pas bien saisi le code ci-dessous :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class MaClasse{
       public static Map uneVariableStatique = new HashMap();
       static{
          uneVariableStatique.put("une clef","une valeur");
          uneVariableStatique.put("une autre clef","une autre valeur");
          //etc .
       }
    }
    c'est quoi Map ?
    le HashMap est-ce un constructeur par défaut et que fait-il au juste ?
    la méthode put sert à quoi ?
    Je t'invite à consulter ce lien concernant les collections "map". Et également celui ci : GoOgLe
    Mais ne te formalise pas sur la classe Map elle n'est ici que pour illustrer l'usage du mot clé static.

    Citation Envoyé par khaled_prg Voir le message
    Je travaille pas avec Eclipse, pour le moment j'utilise Netbeans mais quand même c'est une remarque géniale. vous voulez dire quoi par "changement de ta classe" ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private static final long serialVersionUID = 850043337777238203L;
    est ce que pourrait générer Eclipse quand tu compiles. Si le code a changé depuis la derniere compilation, il va changer sa valeur.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 559
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 559
    Points : 21 621
    Points
    21 621
    Par défaut
    Citation Envoyé par khaled_prg Voir le message
    En C si on déclare une variable statique dans une fonction est-ce sera visible pour les autres fonctions ?
    Bonne remarque. En effet, avec la syntaxe du C, la variable n'est visible que dans la fonction où elle est déclarée. Donc en effet, c'est pas tout-à-fait équivalent à une variable globale. Ce sera compilé tout comme, par contre, et c'est ça qui m'a induit en erreur -_-°.

    Il n'y a pas d'équivalent Java. Disons que l'équivalent, c'est d'organiser ses classes de sorte de respecter les visibilités voulues.

  7. #7
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Points : 67
    Points
    67
    Par défaut
    Bonne remarque. En effet, avec la syntaxe du C, la variable n'est visible que dans la fonction où elle est déclarée. Donc en effet, c'est pas tout-à-fait équivalent à une variable globale. Ce sera compilé tout comme, par contre, et c'est ça qui m'a induit en erreur -_-°.

    Il n'y a pas d'équivalent Java. Disons que l'équivalent, c'est d'organiser ses classes de sorte de respecter les visibilités voulues.
    c'est ce que je pensais, j'avais programmé en C et je me rappelle que les variables statiques ne sont utile que s'ils sont globales, c'est pourquoi je me suis posé la question. Merci pour la réponse.

    Je t'invite à consulter ce lien concernant les collections "map"
    c'est le même lien que vous m'avez donniez tout à l'heure !

    Mais ne te formalise pas sur la classe Map elle n'est ici que pour illustrer l'usage du mot clé static.
    Je sais !, mais je voulais comprendre son utilisation (Le mot static devant un bloc) à partir de l'exemple.

    est ce que pourrait générer Eclipse quand tu compiles. Si le code a changé depuis la derniere compilation, il va changer sa valeur.
    comment ?! je n'ai pas bien compris ce que vous voulez dire.

  8. #8
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par khaled_prg Voir le message
    c'est le même lien que vous m'avez donniez tout à l'heure !
    C'est le même lien car l'explication est écris dans la FAQ.

    Citation Envoyé par khaled_prg Voir le message
    Je sais !, mais je voulais comprendre son utilisation (Le mot static devant un bloc) à partir de l'exemple.
    Une Map est un type de collection en Java. L'une de ses implémentations, la HashMap permet d'associer à une clé <-> une valeur. On a donc dans cet exemple, une collection de type Map qui est de type static.

    Et pour le bloc static, je ne peux que te citer la FAQ :
    Le mot-clé static devant un bloc de code indique que celui-ci ne sera exécuté qu'une fois. L'exécution se fait lors du chargement de la classe par le ClassLoader. On peut utiliser ces blocs, par exemple, pour initialiser des variables statiques complexes.
    Tu ne trouves pas ça clair ?

    Citation Envoyé par khaled_prg Voir le message
    comment ?! je n'ai pas bien compris ce que vous voulez dire.
    Il te signifiait que ce champ (serialVersionUID) changeait de valeur à chaque recompilation de ta classe si celle-ci avait été modifié depuis la dernière compilation. Mais ce n'est vraiment pas important à savoir.

  9. #9
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Salut,

    Une petite remarque concernant la question initiale:

    "pourquoi ne peut-on pas déclarer une variable static dans la méthode main ?? :"

    La méthode main est "static" donc toutes les variables qui y seront déclarées seront "static" par défaut.

    Et c'est la même chose dans toute autre méthode "static".

    Les variables déclarées dans les méthodes non "static" sont non "static".

    Seules les variables déclarées au niveau "class" (qu'on appelle souvent globales, mais qu'on devrait appeler variables de classe) peuvent être déclarées "static" et bien entendu aussi non "static".

    Dan

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Points : 67
    Points
    67
    Par défaut
    Tu ne trouves pas ça clair ?
    bien sur que oui, merci beaucoup.

    La méthode main est "static" donc toutes les variables qui y seront déclarées seront "static" par défaut.

    Et c'est la même chose dans toute autre méthode "static".

    Les variables déclarées dans les méthodes non "static" sont non "static".

    Seules les variables déclarées au niveau "class" (qu'on appelle souvent globales, mais qu'on devrait appeler variables de classe) peuvent être déclarées "static" et bien entendu aussi non "static".
    +1
    bien dit, Merci infiniment.

  11. #11
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par danimo Voir le message
    La méthode main est "static" donc toutes les variables qui y seront déclarées seront "static" par défaut.
    non, les variables décalrées au sein d'une méthode ne sont ni statique ni non statique, elles sont juste locales à la méthode. Seuls des champs ou des méthodes peuvent être non statique ou statique. static est simplement un marqueur qui dit "propre à la classe" alors qu'en son absence c'est "propre à l'instance". Ce qui est dans la méthode, quand à lui, est "propre à la méthode". Les champs (static et non static) sont d'ailleurs gérés de manière totalement différente des variables locale par la machine virtuelle.

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    135
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2012
    Messages : 135
    Points : 67
    Points
    67
    Par défaut
    +1
    c'est claire.

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

Discussions similaires

  1. Variable statique locale à une fonction membre
    Par oodini dans le forum Langage
    Réponses: 36
    Dernier message: 26/11/2011, 23h00
  2. variable statique d'une fonction, locale à un thread?
    Par coyotte507 dans le forum Threads & Processus
    Réponses: 5
    Dernier message: 29/06/2007, 12h54
  3. Utilisation d'une variable statique
    Par kurkaine dans le forum C++Builder
    Réponses: 6
    Dernier message: 14/06/2006, 13h49
  4. Erreur "For loop variable simple local varaible"
    Par Yepazix dans le forum Langage
    Réponses: 13
    Dernier message: 17/09/2005, 22h09
  5. Exportation de variable statique
    Par Laurent Gomila dans le forum C++
    Réponses: 16
    Dernier message: 31/08/2005, 16h32

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