Saltar al contenido principal
Página

Tema 3.1 - Static y Final

Static

Un atributo de una clase se puede modificar con la palabra reservada static para indicar que este atributo no pertenece a las instancias de la clase si no a la propia clase, esto quiere decir que si tenemos varias instancias de una misma clase, cada una de ellas no tendrán una copia propia de ese atributo. A los atributos definidos como static, se les suele llamar atributos de la clase.

De esta manera, para acceder a un atributo static, no necesitamos crear una instancia de la clase, ya que podemos acceder a ellos mediante el nombre de la clase:

public class Mate {
    //Atributo de la clase Mate static
    public static float pi = 3.14f;
    //Podemos acceder a el mediante el nombre de la clase
    public static void main(String[] args) {
        System.out.println(Mate.pi);
    }
}

De la misma manera podemos utilizar la palabra static en la definición de los métodos haciendo que estos sean métodos de la clase, y de la misma manera que con los atributos, podemos llamar a estos métodos mediante el nombre de la clase. Debemos crear estos métodos con unas condiciones, estos métodos estáticos solo pueden acceder a atributos estáticos o llamar a otros métodos estáticos.

public class Persona {
    //Atributo estatico de la clase
    private static int nPersonas;
    //Cada instancia incrementa este atributo
    public Persona() {
        nPersonas++;
    }
    //Metodo estatico que retorna un atributo estatico
    public static int getNPersonas() {
        return nPersonas;
    }
    //MAIN
    public static void main(String[] args) {
        //Se crean instancias
        Persona p1 = new Persona();
        Persona p2 = new Persona();
        Persona p3 = new Persona();
        //Accedemos al metodo estatico para ver el numero
        //de instancias de tipo Persona creadas
        System.out.println(Persona.getNPersonas());
    }
}
Como vemos, el ejemplo anterior utiliza los métodos y atributos estáticos o de la clase para implementar un contador de instancias, que es uno de los múltiples usos que tiene el uso del modificador static.

Final

Cuando necesitamos que el valor de un atributo no cambie durante el transcurso de nuestro programa, debemos utilizar el modificador final en su definición de la siguiente manera:

public final float pi = 3.14f;
En este ejemplo utilizamos el modificador final para almacenar el valor de la constante matemática pi, ya que su valor nunca va a cambiar, si por error intentamos modificar el valor de un atributo definido como final, el compilador nos notificaría un error.
Además, muchas veces los modificadores static y final se utilizan en conjunto para definir constantes como puedes ver en el siguiente ejemplo:
import java.util.*;  

public class Constantes {
    //Constantes publicas
    public static final float PI = 3.141592f;
    public static final float E = 2.728281f;
    //MAIN
    public static void main(String[] args) {
         System.out.println("PI = " + Constantes.PI);
         System.out.println("E = " + Constantes.E);
    }
}

 Definiendo un atributo como publicstatic final, obtenemos una constante que podrá ser accedida desde cualquier clase (public), el acceso se podrá realizar sin tener que instanciar la clase mediante el nombre de la clase (static) y su valor no podrá ser modificado en ningún momento (final).

Última modificación: miércoles, 16 de marzo de 2022, 10:01