Elementos estáticos
Ahora estamos en mejor disposición para entender un poco mejor en qué
consiste eso de declarar a métodos y propiedades como estáticos. Se
declara uno de estos elementos como estático cuando queremos que sólo exista
una copia del mismo.
Si escuchas a gente hablar de clases estáticas en Java, que sepas que
miente. Se llama así coloquialmente a las clases que tienen todos sus métodos
y propiedades estáticos y que no permiten ser instanciadas (como pasa con Math).
Ese tipo de clases suelen ser repositorios de métodos y/o propiedades y suelen
alejarse un poco de la idea de programación orientada a objetos.
Las propiedades y métodos estáticos (en clases que no lo son) traen otro
problema añadido. Desde los métodos "normales" podremos acceder a todas ellas,
pero desde los estáticos sólo podemos acceder a los estáticos. Esto es debido a
que, cuando llamamos a un método no estático, Java le pasa implícitamente
(uséase, que nosotros ni nos enteramos) como parámetro la referencia
this, que como sabemos apunta a la instancia
actual. En el caso de los métodos estáticos esto no sucede, por lo que dentro
del código del método no sabe qué instancia le ha llamado y por tanto no puede
acceder a la copia de las variables de dicha instancia, sólo a la copia única
de las propiedades y métodos estáticos.
Un problema de las propiedades estáticas es su inicialización. Puesto
que son comunes a todas las instancias de un objeto, no es buena idea hacerlo
desde un constructor ya que inicializaría dichas propiedades cada vez que se
creara una instancia nueva. Normalmente se puede inicializar en la misma declaración:
static int i = 324;
Pero, en algunos casos, puede ser necesario algo más complicado. O quizá
simplemente queramos separar la declaración de la variable de su inicialización.
En ese caso utilizaremos la siguiente sintaxis:
Inicializando.java
public class Inicializando {
static String mensaje;
static {
mensaje = new String("Este es el mensajito");
}
public static void main(String[] args) {
System.out.println(mensaje);
}
}
Vemos, además, reflejado en este ejemplo el hecho de que los métodos
estáticos pueden acceder a otros miembros estáticos de la clase.