Variable estática en Java:¿Qué es el bloque estático y el método? [Ejemplo]
La estática puede ser:
- Variables estáticas
- Métodos estáticos
- Bloques estáticos de código.
Veamos primero las variables estáticas y los métodos estáticos.
¿Qué es la variable estática en Java?
Variable estática en Java es una variable que pertenece a la clase y se inicializa solo una vez al comienzo de la ejecución. Es una variable que pertenece a la clase y no al objeto (instancia). Las variables estáticas se inicializan solo una vez, al comienzo de la ejecución. Estas variables se inicializarán primero, antes de la inicialización de cualquier variable de instancia.
- Una sola copia para ser compartida por todas las instancias de la clase
- Se puede acceder a una variable estática directamente por el nombre de la clase y no necesita ningún objeto
Sintaxis:
<class-name>.<variable-name>
¿Qué es el método estático en Java?
Método estático en Java es un método que pertenece a la clase y no al objeto. Un método estático solo puede acceder a datos estáticos. Es un método que pertenece a la clase y no al objeto (instancia). Un método estático solo puede acceder a datos estáticos. No puede acceder a datos no estáticos (variables de instancia).
- Un método estático solo puede llamar a otros métodos estáticos y no puede llamar a un método no estático desde él.
- Se puede acceder a un método estático directamente por el nombre de la clase y no necesita ningún objeto
- Un método estático no puede hacer referencia a las palabras clave "esto" o "súper" de ninguna manera
Sintaxis:
<class-name>.<method-name>
¡Aprendamos los matices de las palabras clave estáticas haciendo algunos ejercicios!
Ejemplo:cómo llamar a variables y métodos estáticos
Paso 1) Copie el siguiente código en un editor
public class Demo{ public static void main(String args[]){ Student s1 = new Student(); s1.showData(); Student s2 = new Student(); s2.showData(); //Student.b++; //s1.showData(); } } class Student { int a; //initialized to zero static int b; //initialized to zero only when class is loaded not for each object created. Student(){ //Constructor incrementing static variable b b++; } public void showData(){ System.out.println("Value of a = "+a); System.out.println("Value of b = "+b); } //public static void increment(){ //a++; //} }
Paso 2) Guarde y compile el código. Ejecute el código como, java Demo .
Paso 3) El resultado esperado se muestra a continuación
El siguiente diagrama muestra cómo se crean las variables y los objetos de referencia y cómo las diferentes instancias acceden a las variables estáticas.
Paso 4) Es posible acceder a una variable estática desde fuera de la clase usando la sintaxis ClassName.Variable_Name . Descomente las líneas # 7 y 8 . Guardar, compilar y ejecutar. Observe la salida.
Value of a = 0 Value of b = 1 Value of a = 0 Value of b = 2 Value of a = 0 Value of b = 3
Paso 5) Descomente las líneas 25, 26 y 27. Guardar, compilar y ejecutar.
error: non-static variable a cannot be referenced from a static context a++;
Paso 6) Error =? Esto se debe a que no es posible acceder a la variable de instancia “a ” del método de clase estática de Java “increment “.
¿Qué es el bloque estático en Java?
El bloque estático es un bloque de declaración dentro de una clase de Java que se ejecutará cuando una clase se cargue por primera vez en la JVM. Un bloque estático ayuda a inicializar los miembros de datos estáticos , al igual que los constructores ayudan a inicializar los miembros de la instancia.
class Test{ static { //Code goes here } }
El siguiente programa es el ejemplo de un bloque estático de Java.
Ejemplo:Cómo acceder al bloque estático
public class Demo { static int a; static int b; static { a = 10; b = 20; } public static void main(String args[]) { System.out.println("Value of a = " + a); System.out.println("Value of b = " + b); } }
obtendrá el siguiente resultado del programa.
Value of a = 10 Value of b = 20
Java
- Palabra clave final de Java
- Operador de instancia de Java
- Clase estática anidada de Java
- Clase anónima de Java
- Clase única de Java
- Reflexión Java
- Manejo de excepciones de Java
- Clase Java ObjectOutputStream
- Genéricos de Java
- Clase de archivo Java
- Interfaz vs clase abstracta en Java:¿cuál es la diferencia?