Diferencia entre variables estáticas y finales en Java

Rupam Yadav 12 octubre 2023
  1. Variables estáticas en Java
  2. Variables finales en Java
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 Yadav avatar Rupam Yadav avatar

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

Artículo relacionado - Java Variable