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()); } }
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;
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); } }