Atrbiutos y métodos estáticos
Un atributo estático es aquel en el que no existe una copia en cada objeto. Todos los objetos de una misma clase comparten el mismo valor. Estos también se conocen como atributos de clase o métodos de clase.
Atributos estáticos
Supongamos que necesitamos añadir en la clase Persona un atributo que nos indique qué día de la semana es hoy. Evidentemente, si hoy es lunes, será lunes para todos los demás. Por lo tanto, este valor será compartido por todos los objetos.
Un atributo estático se declara mediante la palabra reservada static:
class Persona{
static String hoy;
}
Para acceder a un atributo estático es posible utilizar el nombre de la clase o la referencia a cualquier objeto de esa clase:
Persona p = new Persona();
Persona.hoy = "domingo";
System.out.println(p.hoy); // imprimirá "domingo"
Para asignar un valor inicial a un atributo estático podemos realizar lo siguiente:
class Persona{
static String hoy = "lunes";
}
Los atributos estáticos son comúnmente usados para:
- Contadores de instancias.
- Constantes que son compartidas entre todas las instancias.
- Configuración o parámetros globales para la clase.
Métodos estáticos
Con la misma filosofía, podemos declarar métodos estáticos. Estos no requieren de ningún objeto para ejecutarse. Por lo tanto, no pueden utilizar ningún atributo que no sea estático.
Este método devuelve el día de la semana a partir del número del día de la semana en que estamos:
class EjemploEstatico{
static String diaSemana(int dia){
switch(dia){
case 1: return "lunes";
case 2: return "martes";
case 3: return "miércoles";
case 4: return "jueves";
case 5: return "viernes";
case 6: return "sábado";
case 7: return "domingo";
}
return "error";
}
}
Los métodos estáticos, en cambio, pueden acceder y modificar atributos estáticos.
public class Calculadora {
static int resultado = 0;
static void sumar(int valor) {
resultado += valor; // Acceso a atributo estático
}
}
La forma de invocar un método estático es igual que los atributos estáticos, mediante el nombre de la clase o de una referencia a un objeto de esa clase:
// Forma 1: mediante la clase
String dia = EjemploEstatico.diaSemana(1);
// Forma 2: mediante el objeto
EjemploEstatico e = new EjemploEstatico();
String dia2 = e.diaSemana(2);
La recomendación es llamar siempre a estos atributos o métodos utilizando el nombre de la clase.
Uso de this en método estáticos
No se puede usar this dentro de métodos estáticos, ya que los métodos estáticos no están ligados a una instancia específica de la clase. El operador this solo tiene sentido en el contexto de métodos de instancia.
class Utilidades {
static void mostrarNombre() {
System.out.println(this.nombre); // Esto causará un error de compilación
}
}