Para definir una propiedad o método estático en lenguaje Java se antepone el modificador static a su nombre.
Las propiedades estáticas de una Clase son compartidas por todos los Objetos que heredan de ella, con lo que si su valor es modificado en cualquier de ellos afectará a todas las demás instancias.
El mencionado modificador static es utilizado también para declarar constantes o propiedades cuyo valor no puede ser modificado una vez definido.
Por otro lado, para acceder a los métodos estáticos de una clase no es necesario crear un objeto, pudiendo acceder a ellos a través del propio nombre de clase.
A continuación te mostramos un ejemplo práctico que te ayudará a aprender cómo se implementa todo lo que te acabamos de comentar.
Main.java:
package EjemplosPOO.ejemplo05;
public class Main
{
public static void main(String[] args)
{
// Ahora creamos la instancia para poder usar sus métodos
Coche c1 = new Coche();
// Taambién podríamos haberlo hecho así
c1.setTraccion( Coche.TRACCION_CUATRO_RUEDAS );
// Hacer esto sería lo mismo que lo anterior (pero tendríamos que conocer
// los valores) y estar seguros de que el valor de la constante no cambiará
c1.setTraccion( 3 );
System.out.println("El coche tiene: " + c1.getTraccionTexto() );
System.out.println( "---------------" );
// Creamos otras dos intancias de Coche para comprobar cómo funciona la
// propiedad estática 'num' (se incrementa en 1 cada vez que se crea un
// objeto)
Coche c2 = new Coche();
Coche c3 = new Coche();
Coche c4 = new Coche();
System.out.println( "Numero de instancias de Coche: [" + c1.getNumInstancias() + "]" );
System.out.println( "---------------" );
// Ahora llamamos al método estático de la clase Barco (observa que tampoco
// la hemos instanciado
Barco.zarpar();
}
}
Coche.java:
package EjemplosPOO.ejemplo05;
public class Coche
{
// Esta propiedad estática la usaremos para contar el número de objetos
// que se vayan creando
static int num = 0;
// Las siguientes propiedades estáticas las usaremos como 'constantes', cuyo
// valor no podrá ser modificado
public static final int TRACCION_DELANTERA = 1;
public static final int TRACCION_TRASERA = 2;
public static final int TRACCION_CUATRO_RUEDAS = 3;
private int traccion;
// ----------------------------
public Coche()
{
// Cada vez que se cree un objeto nuevo 'num' se incrementa en 1
// A las propiedades y métodos estáticos no se puede acceder con 'this'
num = num + 1;
}
// ----------------------------
public int getTraccion() {
return this.traccion;
}
// ----------------------------
public void setTraccion(int traccion) {
this.traccion = traccion;
}
// ----------------------------
public String getTraccionTexto()
{
String texto;
switch( this.traccion )
{
case 1:
texto = "Tracción delantera";
break;
case 2:
texto = "Tracción trasera";
break;
case 3:
texto = "Tracción a las cuatro ruedas";
break;
default:
texto = "Tracción no especificada";
}
return texto;
}
// ----------------------------
public int getNumInstancias() {
return num;
}
}
Barco.java:
package EjemplosPOO.ejemplo05;
public class Barco
{
public Barco() {
}
// ----------------------------
public static void zarpar() {
System.out.println("El barco está zarpando");
}
}
Al ejecutar el programa veríamos lo siguiente: