Una variable estática es común a todas las instancias (u objetos) de la clase porque es una variable de nivel de clase. En otras palabras se puede decir que sólo se crea una única copia de la variable estática y se comparte entre todas las instancias de la clase. La asignación de memoria para tales variables sólo ocurre una vez cuando la clase se carga en la memoria.
Al igual que las variables podemos tener bloque estático, método estático y clase estática, para leer sobre ellos consulte: palabra clave static en java.
Sintaxis de la variable estática
palabra clave static seguida del tipo de datos, seguido del nombre de la variable.
static data_type variable_name;
Como mencioné anteriormente que las variables estáticas son compartidas entre todas las instancias de la clase, son útiles cuando necesitamos hacer gestión de memoria. En algunos casos queremos tener un valor común para todas las instancias como variable global entonces es mucho mejor declararlas estáticas ya que esto puede ahorrar memoria (porque sólo se crea una única copia para las variables estáticas).
Entendamos esto con un ejemplo:
Ejemplo de variable estática en Java
class VariableDemo{ static int count=0; public void increment() { count++; } public static void main(String args) { VariableDemo obj1=new VariableDemo(); VariableDemo obj2=new VariableDemo(); obj1.increment(); obj2.increment(); System.out.println("Obj1: count is="+obj1.count); System.out.println("Obj2: count is="+obj2.count); }}
Salida:
Obj1: count is=2Obj2: count is=2
Como se puede ver en el ejemplo anterior que ambos objetos están compartiendo una misma copia de la variable estática es por eso que mostraron el mismo valor de la cuenta.
Ejemplo 2: Se puede acceder a la variable estática directamente en un método estático
class JavaExample{ static int age; static String name; //This is a Static Method static void disp(){ System.out.println("Age is: "+age); System.out.println("Name is: "+name); } // This is also a static method public static void main(String args) { age = 30; name = "Steve"; disp(); }}
Salida:
Age is: 30Name is: Steve
Inicialización de la variable estática
- Las variables estáticas se inicializan cuando se carga la clase.
- Las variables estáticas se inicializan antes de crear cualquier objeto de esa clase.
- Las variables estáticas se inicializan antes de que se ejecute cualquier método estático de la clase.
Los valores por defecto de las variables estáticas y no estáticas son los mismos.
Enteros primitivos(long
, short
etc): 0
Puntos flotantes primitivos(float
, double
): 0.0
booleanos: false
referencias a objetos: null
Variables finales estáticas
Las variables finales estáticas son constantes. Veamos el siguiente código:
public class MyClass{ public static final int MY_VAR=27;}
Nota: ¡El nombre de la variable constante debe estar en mayúsculas! se puede utilizar el guión bajo (_) entre.
1) El código anterior se ejecutará tan pronto como se cargue la clase MyClass
, antes de que se llame al método estático e incluso antes de que se pueda acceder a cualquier variable estática.
2) La variable MY_VAR
es pública lo que significa que cualquier clase puede utilizarla. Es una variable estática por lo que no se necesita ningún objeto de la clase para acceder a ella. Es final por lo que el valor de esta variable nunca puede ser cambiado en la actual o en cualquier clase.
Puntos clave:
la variable final siempre necesita inicialización, si no se inicializa arrojaría un error de compilación. echa un vistazo al siguiente ejemplo-
public class MyClass{ public static final int MY_VAR;}
Error: variable MY_VAR might not have been initialized