Diferencia entre variables estáticas y finales en Java
Este tutorial muestra las diferencias entre las palabras clave static
y final
. Analicemos las diferencias en un formato tabular y ejemplos prácticos.
static |
final |
---|---|
No se requiere la inicialización de una variable estática durante la declaración. | Se requiere inicializar una variable final cuando se declara. |
Las variables estáticas se pueden reinicializar | Las variables finales no se pueden reinicializar. |
Se utiliza con clases, variables, métodos y bloques estáticos anidados. | Se utiliza con clases, métodos y variables. |
Los métodos estáticos solo pueden ser llamados por otros métodos estáticos. | Los métodos finales no pueden ser anulados por subclases. |
Variables estáticas en Java
Cuando creamos una variable estática o un método, se adjunta a la clase y no al objeto. La variable o método compartirá la misma referencia para todo el programa.
El siguiente programa tiene una clase DummyClass
que contiene una variable estática num
y un método estático llamado dummyMethod()
. Para acceder a estos dos miembros desde otra clase, no podemos crear un objeto de la DummyClass
porque son estáticos.
Los llamamos directamente usando el nombre de la clase.
Ejemplo:
public class ExampleClass3 {
public static void main(String[] args) {
DummyClass.num = 5;
System.out.println("Static variable value: " + DummyClass.num);
DummyClass.dummyMethod();
}
}
class DummyClass {
public static int num = 0;
public static void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
Producción :
Static variable value: 5
Inside Static Dummy Method
Clase anidada que usa la palabra clave static
sin referencia a la clase externa. Podemos crear una clase interna dentro de una clase usando la palabra clave static
.
En el siguiente ejemplo, tenemos una clase DummyClass
, y dentro de ella, creamos una clase estática llamada InnerClass
, y en esta clase creamos un método dummyMethod()
.
Ahora en la clase ExampleClass3
, obtenemos InnerClass
usando DummyClass.InnerClass
y creamos un objeto de la clase DummyClass
y llamamos a la función dummyMethod()
.
Ejemplo:
public class ExampleClass3 {
public static void main(String[] args) {
DummyClass.InnerClass dummyClassObj = new DummyClass.InnerClass();
dummyClassObj.dummyMethod();
}
}
class DummyClass {
static class InnerClass {
void dummyMethod() {
System.out.println("Inside Static Dummy Method Of The Inner Static Class");
}
}
}
Producción :
Inside Static Dummy Method Of The Inner Static Class
Variables finales en Java
Una variable final no se puede modificar una vez inicializada. El ejemplo muestra que si creamos una variable final y luego intentamos reiniciarla, obtenemos un error en la salida.
public class ExampleClass3 {
public static void main(String[] args) {
final int num = 0;
num = 1;
}
}
Producción :
java: cannot assign a value to final variable num
Otra clase no puede extender una clase final
. El uso de la palabra clave final
al crear una clase impide que la clase sea heredada por cualquier otra clase.
Ejemplo:
public class ExampleClass3 {
public static void main(String[] args) {
new DummyClass().dummyMethod();
}
}
final class DummyClass {
public void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
class DummyClass2 extends DummyClass {
public void dummyMethod2() {
System.out.println("Inside Static Dummy Method 2");
}
}
Producción :
java: cannot inherit from final com.tutorial.DummyClass
No podemos anular un método final
en una subclase. Al igual que una clase final, si una función usa la palabra clave final
, sus subclases no pueden anularla.
public class ExampleClass3 {
public static void main(String[] args) {
new DummyClass2().dummyMethod();
}
}
class DummyClass {
public final void dummyMethod() {
System.out.println("Inside Static Dummy Method");
}
}
class DummyClass2 extends DummyClass {
public void dummyMethod() {
System.out.println("Inside Overridden Dummy Method");
}
}
Producción :
java: dummyMethod() in com.tutorial.DummyClass2 cannot override dummyMethod() in com.tutorial.DummyClass
overridden method is final
Rupam Saini is an android developer, who also works sometimes as a web developer., He likes to read books and write about various things.
LinkedIn