En général, static
signifie «associé au type lui-même, plutôt qu'à une instance du type».
Cela signifie que vous pouvez référencer une variable statique sans avoir jamais créé d'instances du type, et tout code faisant référence à la variable fait exactement référence aux mêmes données. Comparez cela avec une variable d'instance: dans ce cas, il existe une version indépendante de la variable par instance de la classe. Ainsi, par exemple:
Test x = new Test();
Test y = new Test();
x.instanceVariable = 10;
y.instanceVariable = 20;
System.out.println(x.instanceVariable);
imprime 10: y.instanceVariable
et x.instanceVariable
sont séparés, car x
et se y
réfèrent à différents objets.
Vous pouvez faire référence à des membres statiques via des références, bien que ce soit une mauvaise idée de le faire. Si nous l'avons fait:
Test x = new Test();
Test y = new Test();
x.staticVariable = 10;
y.staticVariable = 20;
System.out.println(x.staticVariable);
alors cela afficherait 20 - il n'y a qu'une seule variable, pas une par instance. Il aurait été plus clair d'écrire ceci comme:
Test x = new Test();
Test y = new Test();
Test.staticVariable = 10;
Test.staticVariable = 20;
System.out.println(Test.staticVariable);
Cela rend le comportement beaucoup plus évident. Les IDE modernes suggèrent généralement de changer la deuxième liste en troisième.
Il n'y a aucune raison d'avoir une déclaration inline initialisant la valeur comme la suivante, car chaque instance aura sa propre NUMBER
mais toujours avec la même valeur (est immuable et initialisée avec un littéral). C'est la même chose que d'avoir une seule final static
variable pour toutes les instances.
private final int NUMBER = 10;
Par conséquent, s'il ne peut pas changer, il est inutile d'avoir une copie par instance.
Mais, cela a du sens si est initialisé dans un constructeur comme celui-ci:
// No initialization when is declared
private final int number;
public MyClass(int n) {
// The variable can be assigned in the constructor, but then
// not modified later.
number = n;
}
Maintenant, pour chaque instance de MyClass
, nous pouvons avoir une valeur différente mais immuable de number
.