Bloque estático en Java [duplicado]
El otro día estaba revisando un código y me encontré con:
static {
...
}
Viniendo de C++, no tenía idea de por qué estaba ahí. No es un error porque el código se compiló bien. ¿Qué es este bloque de código "estático"?
Es un inicializador estático . Se ejecuta cuando la clase se carga (o se inicializa, para ser precisos, pero normalmente no notas la diferencia).
Se puede considerar como un "constructor de clases" .
Tenga en cuenta que también hay inicializadores de instancia , que tienen el mismo aspecto, excepto que no tienen la static
palabra clave. Estos se ejecutan además del código en el constructor cuando se crea una nueva instancia del objeto.
Es un inicializador estático. Se ejecuta cuando se carga la clase y es un buen lugar para inicializar variables estáticas.
De http://java.sun.com/docs/books/tutorial/java/javaOO/initial.html
Una clase puede tener cualquier número de bloques de inicialización estáticos y pueden aparecer en cualquier parte del cuerpo de la clase. El sistema de ejecución garantiza que los bloques de inicialización estáticos se llamen en el orden en que aparecen en el código fuente.
Si tiene una clase con un mapa de búsqueda estático, podría verse así
class MyClass {
static Map<Double, String> labels;
static {
labels = new HashMap<Double, String>();
labels.put(5.5, "five and a half");
labels.put(7.1, "seven point 1");
}
//...
}
Es útil ya que el campo estático anterior no se pudo inicializar usando labels = ...
. Necesita llamar al método put de alguna manera.
Es un bloque de código que se ejecuta cuando un cargador de clases carga la clase. Está destinado a realizar la inicialización de miembros estáticos de la clase.
También es posible escribir inicializadores no estáticos, que parecen aún más extraños:
public class Foo {
{
// This code will be executed before every constructor
// but after the call to super()
}
Foo() {
}
}