Modificador static

Última actualización: Julio 24

El modificador static se emplea para hacer accesible una clase, parámetro, método o bloque, sin necesidad de instanciar un objeto de la clase en la que está definido.

Para el caso de una clase static, únicamente tiene sentido para las inner class. Es decir, para clases definidas dentro de otras clases. Al declarar una inner class como static, podríamos acceder a ella sin necesidad de instanciar la clase en la que está incluida.

Un método static sería directamente accesible invocándolo, sin necesidad de generar un objeto de la clase en la que está definido. El ejemplo más obvio es el método main, que es el que busca Java para empezar la ejecución de un programa, y tiene que estar accesible sin instanciar un objeto de la clase. Por ello es declarado como public static.

Y un parámetro static lo definiremos cuando necesitemos trabajar con un parámetro común a todos los objetos de la clase.

En los casos anteriores, utilizaremos el modificar static en la declaración.

Parámetro static

Un parámetro de una clase static, puede ser accedido sin necesidad de crearuna instancia de la Clase, es decir, sin necesidad de crear un objeto.

Existen ocasiones en las que resulta muy útil crear un parámetros static. Por ejemplo, si queremos guardar información universal de la clase, como el número de objetos de la clase que queremos manejar.

public class Estudiantes {
    public static int numEstudiantes = 29;
    ...
}

Una vez existe un parámetro definido como static, se puede acceder a él desde dentro o fuera de la Clase, sin necesidad de instanciar la Clase.

int numEstudantesEnJava = Estudiantes.numEstudiantes;

Método static

Una Clase tiene tres tipos fundamentales de métodos:

  • Constructores: Ya describimos como son estos métodos, que tienen el mismo nombre que la clase y se emplean para generar un objeto.
  • Métodos instanciados: Accedemos a ellos a través del objeto.
  • Métodos static: Los que nos ocupan en este momento, que son declarados con el modificador static y pueden ser llamados sin instanciar la Clase, es decir, sin crear un objeto.

Un ejemplo de método static sería:

public class Estudiantes {
    private static int numEstudiantes = 0;
   private String nombre;
    public Estudiantes(String nombre){
        this.nombre = nombre;
        numEstudiantes++;
    }
    public static int getNumEstudiantes(){
        return numEstudiantes;
    }    
};

Actividad: parámetros y métodos estatic

  1. Abre el IDE de trabajo
  1. Usando la clase Coche ya definida en un post anterior, vamos a definir un parámetro estático llamado numCoches que representa el número de coches que se han creado.

La declaración del parámetro sería:

static int numCoches=0;
  1. Lo siguiente que tenemos que hacer es asegurarnos que cada vez que se cree un objeto coche nuevo, el parámetro numCoches se incremente en uno. En la práctica esto significa incrementar el parámetro cada vez que llamemos a un constructor.

Por lo tanto, escribiríamos lo siguiente en cada constructor:

numCoches++;
  1. Para acceder al valor del parámetro numCoches, tenemos que emplear el nombre de la clase, en lugar del nombre de un objeto concreto de la clase. Esto es así, ya que se trata de un parámetro estático que no está asociado a ningún objeto en concreto.

Añadimos la siguiente línea de código al final del método main:

System.out.println("Numero de coches: "+Coche.numCoches);

Ejecutamos el programa y obtendríamos el siguiente resultado:

El porcentaje de tanque lleno es: 0
Vamos a proceder a llenar el tanque
El porcentaje de tanque lleno es: 100
Numero de coches: 2

El método main completo sería:

public class PracticandoConClaseCoche {
    public static void main(String args[]) {
      Coche primerCoche;
      Coche segundoCoche;
      primerCoche = new Coche (5,"Jesús Garcia");
      segundoCoche = new Coche (3,"Laura Perez");
      System.out.println("El porcentaje de tanque lleno es: "+ primerCoche.getporcentajeTanqueLleno());
      if (primerCoche.getporcentajeTanqueLleno()<25){
          System.out.println("Vamos a proceder a llenar el tanque");
          primerCoche.llenadoTanque();
      }
      System.out.println("El porcentaje de tanque lleno es: "+ primerCoche.getporcentajeTanqueLleno());
      System.out.println("Numero de coches: "+Coche.numCoches);
    }
}   
  1. Todo lo comentado anteriormente acerca de la conveniencia de declarar como privados los parámetros internos de una Clase, es perfectamente valido también para los parámetros estáticos.

Por ello, añadimos private a la declaración del parámetro estático:

private static int numCoches=0;

Codificamos un método público y estático que nos devuelta el parámetro, es decir, su método get:

public static int getNumCoches(){
    return numCoches;
}

Y, por supuesto, usamos este método para recuperar el valor de NumCoches en las llamadas desde el método main:

System.out.println("Numero de coches: "+Car.getNumCoches());

NOTA:

Este post es parte de la colección “Java”. Puedes ver el índice de esta colección aquí.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.