¿Declarar una variable como private static varName;
algo diferente de declarar una variable private varName;
?
Sí, ambos son diferentes. Y el primero se llama class variable
porque tiene un valor único para eso, class
mientras que el otro se llama instance variable
porque puede tener un valor diferente para diferentes instances(Objects)
. El primero se crea solo una vez en jvm y el otro se crea una vez por instancia, es decir, si tiene 10 instancias, tendrá 10 diferentes private varName;
en jvm.
¿Declarar la variable como static
le da otras propiedades especiales?
Sí, las variables estáticas obtienen algunas propiedades diferentes a las variables de instancia normales. Ya mencioné algunos y veamos algunos aquí: class variables
(se puede acceder directamente a las variables de instancia que se declaran como estáticas) usando el nombre de clase like ClassName.varName
. Y cualquier objeto de esa clase puede acceder y modificar su valor a diferencia de las variables de instancia a las que solo acceden sus objetos respectivos. Las variables de clase se pueden usar en métodos estáticos.
¿Cuál es el uso de un private static variable
en Java?
Lógicamente, private static variable
no es diferente de public static variable
la primera, te da más control. OMI, literalmente puedes reemplazarpublic static variable
por private static variable
la ayuda de public static
métodos get y set.
Un área ampliamente utilizada private static variable
es la implementación de un Singleton
patrón simple donde tendrá una sola instancia de esa clase en todo el mundo. Aquí el static
identificador juega un papel crucial para hacer que esa instancia única sea accesible para el mundo exterior (por supuesto, el método público de obtención estática también juega un papel principal).
public class Singleton {
private static Singleton singletonInstance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return Singleton.singletonInstance;
}
}