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 :

variable gloable en Java [Débutant(e)]


Sujet :

Langage Java

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut variable gloable en Java
    Comment on peut définir un variable globale en Java? Cela existe en Java? :

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    bien sur que oui!

    voici un exemple de code avec une variable globale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class toto {
     
    	//variables globales
    	private int MaVariableGlobale=0;
     
    	//constructeur
    	public toto()
    	{
     
    	}
     
    }

  3. #3
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Citation Envoyé par djsbens
    bien sur que oui!

    voici un exemple de code avec une variable globale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class toto {
     
    	//variables globales
    	private int MaVariableGlobale=0;
     
    	//constructeur
    	public toto()
    	{
     
    	}
     
    }
    Ce n'est pas très global ça, c'est même local à chaque instance de la classe toto.
    Pour la rendre globale, il faut y ajouter le mot clef "static".

    PS. s'il s'agit d'une constante, rajouter également le mot-clef "final".

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 949
    Points : 1 856
    Points
    1 856
    Par défaut
    Par ailleurs, si vous avez besoin d'une variable globale commune à plusieurs classes, vous pouvez :
    - faire hériter toutes ces classes d'une autre contenant une variable statique,
    - avoir une classe représentant l'application elle-même (celle qui contient la méthode main peut-être?) contenant cette variable. Dans ce cas, l'encapsulation peut être utile : la méthode set peut appeler une méthode pour toutes les classes/objets impactés par le changement de la variable.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    par variable globale j'entendais variable local propre a chaque instance... oups!

    Il est vrai que le mot clé static permet de n'avoir qu'une variable commune a chaques instances de la classe.

    Sorry!

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut ajout du mot "static"
    Oui, il faut ajouter le mot clé static

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class ClassA{
    	public static int varGA;
    }
     
    public class Test{
    	public static void main(String args[]){
    		ClassA a=new ClassA();
    		a.varGA=100;
    		System.out.println("test var globale: varGA = " + a.varGA);
    		a.varGA=10;
    		System.out.println("test var globale apres motification: varGA = " + a.varGA);
    	}
    }
    Affichage:
    test var globale: varGA = 100
    test var globale apres motification: varGA = 10


    Mais j'ai qd meme une question:
    Un warning est affiché car a.varGA n'est pas une manière statique de l'accès à la zone statique de ClassA, qu'est ce que je peux faire? (sauf définir une méthode genre "getVarGA" dans classeA..)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    il faut faire

    Tu n'es plus obliger d'avoir une instance de classe pour avoir accès a ta variable puisqu'elle devenu static.

  8. #8
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Pour être correct il faut écrire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    class ClassA{ 
       public static int varGA; 
    } 
     
    public class Test{ 
       public static void main(String args[]){ 
          ClassA.varGA=100; 
          System.out.println("test var globale: varGA = " + ClassA.varGA); 
          ClassA.varGA=10; 
          System.out.println("test var globale apres motification: varGA = " + ClassA.varGA); 
       } 
    }

  9. #9
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut Re: ajout du mot "static"
    Salut,

    Citation Envoyé par apan
    Mais j'ai qd meme une question:
    Un warning est affiché car a.varGA n'est pas une manière statique de l'accès à la zone statique de ClassA, qu'est ce que je peux faire? (sauf définir une méthode genre "getVarGA" dans classeA..)
    Les éléments statique ne sont pas associé à une instance de l'objet. Tu n'a donc pas à créer d'objet ClassA pour y accéder. Il faut que tu utilises le nom de la classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Test{
       public static void main(String args[]){
          ClassA.varGA=100;
          System.out.println("test var globale: varGA = " + ClassA.varGA);
          ClassA.varGA=10;
          System.out.println("test var globale apres motification: varGA = " + ClassA.varGA);
       }
    }
    Par contre quel est l'objectif de tout cela ? Parce que dans un langage objet, il y a vraiment très peu de cas où l'on doit manipuler des éléments statique comme cela...

    a++

    [edit] grillé...

  10. #10
    Membre chevronné
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Points : 1 958
    Points
    1 958
    Par défaut
    Pour information, j'essai de bannir ce genre de déclarations dans mon code (public static final VAR=xx). Pour ce faire, j'utilise la classe Properties qui permet de stocker de manière compréhensible les variables dans un fichier texte.

  11. #11
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Le problème d'apan, si j'ose dire, est peut être qu'il essaie de refaire en java ce qu'il faisait en C.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Exactly!
    Exactly, Descent !! Comment tu as deviné ??!

  13. #13
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    http://www.developpez.net/forums/viewtopic.php?t=465231

    http://www.developpez.net/forums/viewtopic.php?t=465212



    Tu devrais aller faire un tour sur cette page, cela te permettrait sans doute de mieux appréhender Java.


  14. #14
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    De plus je pense que de parler de variables globale est une erreur en java.

    Variable globale à quoi ? Une classe, un objet, un programme, une instance de programme sur une JVM ?

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 23
    Points : 16
    Points
    16
    Par défaut pout tout non ?
    Citation Envoyé par thibaut
    De plus je pense que de parler de variables globale est une erreur en java.

    Variable globale à quoi ? Une classe, un objet, un programme, une instance de programme sur une JVM ?
    Bonne question, c'est ce qui me brouille aussi...

  16. #16
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Citation Envoyé par thibaut
    De plus je pense que de parler de variables globale est une erreur en java.

    Variable globale à quoi ? Une classe, un objet, un programme, une instance de programme sur une JVM ?
    Je pense que lorsqu'on parle d'une variable globale, on parle d'une variable accessible a l'ensemble de l'instance d'un programme, d'autant plus ici vu que apan essai de reproduire du C. Et donc en JAVA les variables/constantes statiques me paraissent être utilisable pour ce genre de chose étant donnée qu'elles sont accéssible de partout (a condition qu'elles soient publiques bien entendu).

  17. #17
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Citation Envoyé par thibaut
    De plus je pense que de parler de variables globale est une erreur en java.
    Parfaitement d'accord !

    Un petit memento de vocabulaire :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
     
    // Classe Voiture définit un type voiture
    public class Voiture
    {
            // Variable de classe (partagée par tous les objets de class Voiture)
            private static int nbVoitureFabriquee = 0;
     
            // Variable d'instance (propre à chaque objets de la class Voiture)
            private int numSerie = 0;
     
            // Constructeur vide
            public Voiture()
            {
                  // Comme on est dans la classe elle même, 
                  // pas besoin de préfixé la variable de classe
                  // par le nom de la classe mais on pourrait le faire (Exemple 1)
                  nbVoitureFabriquee ++;
     
                  // Comme on est dans la classe elle même, 
                  // pas besoin de préfixé la variable d'instance
                  // par this qui signifie instance courante 
                  // mais on pourrait le faire (Exemple  2)
                  numSerie = nbVoitureFabriquee;
            }
     
            // Constructeur avec un paramètre
            public Voiture(int numSerie)
            {
                  // Exemple 1 :
                  Voiture.nbVoitureFabriquee ++;
     
                  // Exemple 2 : utilisation de this pour distinguer
                  // la variable d'instance du paramètre de même nom.
                  this.numSerie = numSerie;
            }
     
            // Accesseur (Getter en anglais)
            public int getNumSerie()
            {
                  return this.numSerie;
            }
     
            // Mutateur (Setter en anglais)
            public void setNumSerie(int numSerie)
            {
                  this.numSerie = numSerie;
            }
     
            // Méthode d'instance
            public String getNumSerialInString()
            {
                 // Variable locale de même nom que la variable d'instance
                 String numSerie;
     
                 // Utilisation de this pour les distinguer
                 numSerie = String.valueOf(this.numSerie);
     
                 return numSerie;
            }
     
            // Méthode de classe
            public static int getNbVoitures()
            {
                 return nbVoitureFabriquee;
            }
     
            // Méthode de classe
            public static main (String[] args)
            {
                 // v1 et v2 sont des exemplaires du type Voiture,
                 // On parle d'intances de la classe Voiture ou encore d'objets. 
                 Voiture v1, v2;
     
                 // Création d'une première instance ou
                 // Instanciation d'un premier objet
                 v1 = new Voiture();
     
                 System.out.println(v1.getNumSerie()) // -> 1
                 System.out.println(v1.getNbVoitures()) // -> 1
                 System.out.println(Voiture.getNbVoitures()) // -> 1
     
                 // Création d'une deuxième instance
                 v2 = new Voiture();
     
                 System.out.println(v2.getNumSerie()) // -> 2
                 System.out.println(v2.getNbVoitures()) // -> 2
                 System.out.println(Voiture.getNbVoitures()) // -> 2
     
                 System.out.println(v1.getNumSerie()) // -> 1
                 System.out.println(v1.getNbVoitures()) // -> 2
                 System.out.println(Voiture.getNbVoitures()) // -> 2
     
            }
    }

  18. #18
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    thibaut a écrit:
    De plus je pense que de parler de variables globale est une erreur en java.
    Parfaitement d'accord !
    Dans un programme, une classe "Globale" avec a l'intérieur des variables statiques publiques ou privées et accéssible par des méthodes statiques me parait être accéptable.

  19. #19
    Rédacteur
    Avatar de benwit
    Profil pro
    dev
    Inscrit en
    Septembre 2004
    Messages
    1 676
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 676
    Points : 4 265
    Points
    4 265
    Par défaut
    Personnellement, afficionado de la programmation orientée objet, je ne procède jamais de la sorte et c'est probablement pour cela que le vocabulaire n'est pas le même.

    Ceci étant dit, si tu écris de telles classes qui répondent à tes besoins, en effet, tu peux la qualifier de "globale" ainsi que les variables qu'elle contient.

  20. #20
    Membre habitué
    Inscrit en
    Janvier 2005
    Messages
    491
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 491
    Points : 172
    Points
    172
    Par défaut
    Tout ca n'est que du vocabulaire...
    Je veu dire, par exemple la variable PI de la classe Math peut être considérée comme globale... dans le sens ou on y accéde de n'importe quelle classe. Aprés, on peut aussi dire qu'elle n'est pas globale puisqu'elle est contenue dans la classe Math mais bon...

    Pour mon exemple précédent, je doute aussi qu'il y ai beaucoup de gens qui réunissent leur variables statiques dans une classe "Globale"... En général chaque variable statique est associé a un type d'objet spécifique (PI avec les maths ...) et est donc contenue dans la classe en question. C'est donc moyennement objet de réunir plein de variables statiques de types différents dans une classe "Globales".
    Mais aprés tout pk pas, chacun sa facon de programmer, c'était uniquement pour dire qu'on appele en général globale une variable accéssible de partout, et donc qu'a ce titre on peut considérer les variables statiques comme des variables globales...

Discussions similaires

  1. Variables génériques en Java ?
    Par barbiche dans le forum Langage
    Réponses: 11
    Dernier message: 08/08/2007, 15h54
  2. Variable dynamique et Java
    Par Naeco dans le forum Langage
    Réponses: 4
    Dernier message: 06/04/2007, 11h14
  3. [ Variable environnement ] Version java
    Par lhpp dans le forum Général Java
    Réponses: 13
    Dernier message: 08/04/2006, 11h01
  4. [Applet] Comment envoyer une variable php au java?
    Par abstractor77 dans le forum Interfaces Graphiques en Java
    Réponses: 1
    Dernier message: 09/03/2006, 10h18
  5. [Cookies] Variables gloables
    Par Néo-Tony dans le forum Langage
    Réponses: 3
    Dernier message: 15/02/2006, 09h30

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