Comment on peut définir un variable globale en Java? Cela existe en Java?:
Comment on peut définir un variable globale en Java? Cela existe en Java?:
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.Envoyé par djsbens
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".
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.
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!
Oui, il faut ajouter le mot clé static
Affichage:
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); } }
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..)
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part ClassA.varGA
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); } }
Salut,
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 :Envoyé par apan
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...
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); } }
a++
[edit] grillé...
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.
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.
Exactly, Descent !! Comment tu as deviné ??!![]()
![]()
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.
![]()
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...Envoyé par thibaut
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).Envoyé par thibaut
Parfaitement d'accord !Envoyé par thibaut
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 } }
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.Parfaitement d'accord !thibaut a écrit:
De plus je pense que de parler de variables globale est une erreur en java.
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.
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...
Partager