Im Allgemeinen static
bedeutet "dem Typ selbst zugeordnet und nicht einer Instanz des Typs".
Das heißt, Sie können auf eine statische Variable verweisen, ohne jemals eine Instanz dieses Typs erstellt zu haben, und jeder Code, der auf die Variable verweist, verweist auf genau dieselben Daten. Vergleichen Sie dies mit einer Instanzvariablen: In diesem Fall gibt es eine unabhängige Version der Variablen pro Instanz der Klasse. Also zum Beispiel:
Test x = new Test();
Test y = new Test();
x.instanceVariable = 10;
y.instanceVariable = 20;
System.out.println(x.instanceVariable);
druckt 10 aus: y.instanceVariable
und x.instanceVariable
sind getrennt, weil x
und y
beziehen sich auf verschiedene Objekte.
Sie können über Referenzen auf statische Mitglieder verweisen, obwohl dies eine schlechte Idee ist. Wenn wir das taten:
Test x = new Test();
Test y = new Test();
x.staticVariable = 10;
y.staticVariable = 20;
System.out.println(x.staticVariable);
dann würde das 20 ausdrucken - es gibt nur eine Variable, keine pro Instanz. Es wäre klarer gewesen, dies zu schreiben als:
Test x = new Test();
Test y = new Test();
Test.staticVariable = 10;
Test.staticVariable = 20;
System.out.println(Test.staticVariable);
Das macht das Verhalten viel offensichtlicher. Moderne IDEs schlagen normalerweise vor, die zweite Auflistung in die dritte zu ändern.
Es gibt keinen Grund für eine Inline-Deklaration, die den Wert wie folgt initialisiert, da jede Instanz ihren eigenen NUMBER
Wert hat, jedoch immer denselben Wert hat (unveränderlich und mit einem Literal initialisiert). Dies ist dasselbe, als nur eine final static
Variable für alle Instanzen zu haben.
private final int NUMBER = 10;
Wenn es sich nicht ändern kann, macht es keinen Sinn, eine Kopie pro Instanz zu haben.
Es ist jedoch sinnvoll, wenn es in einem Konstruktor wie diesem initialisiert wird:
// 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;
}
Jetzt MyClass
können wir für jede Instanz von einen anderen, aber unveränderlichen Wert von haben number
.