En general, static
significa "asociado con el tipo en sí mismo, en lugar de una instancia del tipo".
Eso significa que puede hacer referencia a una variable estática sin haber creado instancias del tipo, y cualquier código que se refiera a la variable se refiere a los mismos datos exactos. Compare esto con una variable de instancia: en ese caso, hay una versión independiente de la variable por instancia de la clase. Así por ejemplo:
Test x = new Test();
Test y = new Test();
x.instanceVariable = 10;
y.instanceVariable = 20;
System.out.println(x.instanceVariable);
imprime 10: y.instanceVariable
yx.instanceVariable
están separados, porque x
y se y
refieren a diferentes objetos.
Usted puede referencia a miembros estáticos a través de referencias, aunque es una mala idea hacerlo. Si lo hiciéramos:
Test x = new Test();
Test y = new Test();
x.staticVariable = 10;
y.staticVariable = 20;
System.out.println(x.staticVariable);
entonces eso imprimiría 20: solo hay una variable, no una por instancia. Hubiera sido más claro escribir esto como:
Test x = new Test();
Test y = new Test();
Test.staticVariable = 10;
Test.staticVariable = 20;
System.out.println(Test.staticVariable);
Eso hace que el comportamiento sea mucho más obvio. Los IDEs modernos generalmente sugerirán cambiar la segunda lista a la tercera.
No hay ninguna razón para tener una declaración en línea que inicialice el valor de la siguiente manera, ya que cada instancia tendrá la suya NUMBER
pero siempre con el mismo valor (es inmutable e inicializada con un literal). Es lo mismo que tener solo una final static
variable para todas las instancias.
private final int NUMBER = 10;
Por lo tanto, si no puede cambiar, no tiene sentido tener una copia por instancia.
Pero, tiene sentido si se inicializa en un constructor como este:
// 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;
}
Ahora, para cada instancia de MyClass
, podemos tener un valor diferente pero inmutable de number
.