In generale, static
significa "associato al tipo stesso, anziché a un'istanza del tipo".
Ciò significa che è possibile fare riferimento a una variabile statica senza aver mai creato un'istanza del tipo e qualsiasi codice che si riferisce alla variabile si riferisce agli stessi stessi dati. Confronta questo con una variabile di istanza: in tal caso, esiste una versione indipendente della variabile per istanza della classe. Quindi per esempio:
Test x = new Test();
Test y = new Test();
x.instanceVariable = 10;
y.instanceVariable = 20;
System.out.println(x.instanceVariable);
stampa 10: y.instanceVariable
e x.instanceVariable
sono separati, perché x
e si y
riferiscono a oggetti diversi.
Puoi fare riferimento a membri statici tramite riferimenti, anche se è una cattiva idea farlo. Se facessimo:
Test x = new Test();
Test y = new Test();
x.staticVariable = 10;
y.staticVariable = 20;
System.out.println(x.staticVariable);
quindi verrebbero stampati 20 - c'è solo una variabile, non una per istanza. Sarebbe stato più chiaro scrivere questo come:
Test x = new Test();
Test y = new Test();
Test.staticVariable = 10;
Test.staticVariable = 20;
System.out.println(Test.staticVariable);
Ciò rende il comportamento molto più evidente. Gli IDE moderni di solito suggeriranno di cambiare il secondo elenco nel terzo.
Non c'è motivo di avere una dichiarazione in linea che inizializzi il valore come il seguente, poiché ogni istanza avrà il proprio NUMBER
ma sempre con lo stesso valore (è immutabile e inizializzata con un valore letterale). È lo stesso che avere una sola final static
variabile per tutte le istanze.
private final int NUMBER = 10;
Pertanto, se non può cambiare, non ha senso avere una copia per istanza.
Ma ha senso se viene inizializzato in un costruttore come questo:
// 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;
}
Ora, per ogni istanza di MyClass
, possiamo avere un valore diverso ma immutabile di number
.