La palabra clave final se emplea en distintos contextos. En primer lugar, final, es un modificador de no acceso que sólo se puede aplicar a una variable, un método o una clase

¿Para qué sirve la variable final en Java?

Las variables finales solo se usan en aquellos valores que sabemos de antemano que no van a variar, o sea, que permanecerán constantes durante la ejecución del programa.

Cuando una variable se declara empleando la palabra clave final, su valor no puede ser modificado. Esto también significa que se debe inicializar.

Es una buena práctica representar las variables finales en mayúsculas, utilizando guiones bajos para separar las palabras como puede verse en el siguiente ejemplo:

final int LIMITE=5;
final int LIMITE;
static final double PI = 3.141592653589793;

¿Cómo Inicializar una variable final en Java?

Es vital inicializar una variable final, debido a que el compilador emitirá un error al realizar la compilación. Las variables finales solo se pueden inicializar una vez, ya sea por medio de un inicializador o bien una declaración de asignación. 

Cabe destacar que existen tres formas de inicializar una variable final:

  • La inicialización de la variable final tiene lugar al efectuar la declaración de la misma. 
  • Se puede inicializar una variable final en blanco en el interior del bloque inicializador de instancias o bien dentro del constructor. 
  • Una variable estática final en blanco se puede inicializar en un bloque estático.

En este ejemplo se pueden ver las formas de inicializar una variable final:

// Programa Java para demostrar diferentes formas 
// de inicializar una variable final
 
class JDC
{
    // una variable final
    // inicialización directa
    final int LIMITE = 5;
     
    // una variable final en blanco
    final int CAPACIDAD;
     
    // otra variable final en blanco
    final int MINIMO;
     
    // una variable static final PI
    // inicialización directa
    static final double PI = 3.141592653589793;
     
    // una variable static final en blanco
    static final double CONSTANTEEULER;
     
    // bloque inicializador de instancias
    // para inicializar CAPACIDAD
    {
        CAPACIDAD = 25;
    }
     
    // bloque inicializador static 
    // para inicializar CONSTANTEEULER
    static{
        CONSTANTEEULER = 2.3;
    }
     
    // consctructor para inicializar MINIMO
    // Tenga en cuenta que si hay más de un constructor, 
    // debe inicializar MINIMO en ellos también
    public JDC() 
    {
        MINIMO = -1;
    }
         
}

Variable final de referencia

La variable final que sea una referencia a un objeto, se denomina variable final de referencia. A continuación en el ejemplo la variable final de StringBuffer se parece a:

final StringBuffer cadena;

Una variable final no se puede reasignar. Pero en el caso de una variable final de referencia, se puede modificar el estado interno del objeto indicado por esa variable de referencia. Esta propiedad de final se conoce como no-transitividad

En el siguiente ejemplo se puede observar la declaración de una variable final de referencia y el cambio de estado interno.

//Programa Java para demostrar
// la variable final de referencia
class JDC {
    public static void main(String[] args) {
        //una variable final de referencia
        final StringBuilder cadena=new StringBuilder("Java");
        System.out.println(cadena);
        //cambiando estado interno de referencia del objeto
        //por variable de referencia final 'cadena'
        cadena.append("desdeCero");
        System.out.println(cadena);
    }
}

Salida:

Java
JavadesdeCero

La propiedad no-transitividad se aplica también a las matrices, esto se debe a que en Java, las matrices son objetos. Las matrices que tienen la palabra clave final también se denominan matrices finales.

¿Todavía no te has apuntado a nuestro Bootcamp?
Tenemos muchos cursos para ofrecerte y ¡TOTALMENTE GRATIS! Estos son algunos de ellos: