Cómo utilizar inicializadores estáticos en Java

En Java, puede utilizar bloques inicializadores para inicializar variables de instancia. Inicializador bloques no se ejecutan hasta que se crea una instancia de una clase, por lo que no se puede contar con ellos para inicializar los campos estáticos. Después de todo, es posible acceder a un campo estático antes de crear una instancia de una clase.

Java proporciona una característica llamada inicializador estático que está diseñado específicamente para dejar de inicializar los campos estáticos. La forma general de un inicializador estático se ve así:

static {declaraciones ...}

Como se puede ver, un inicializador estático es similar a un bloque inicializador pero comienza con la palabra estático. Al igual que con un bloque inicializador, codificar inicializadores estáticos en el cuerpo de la clase, pero fuera de cualquier otro bloque, como el cuerpo de un método o constructor.

La primera vez que acceda a un miembro estático, como un campo estático o un método estático, cualquier inicializadores estáticos en la clase se ejecutan - siempre y cuando no lo ha creado una instancia de la clase. Eso es porque los inicializadores estáticos también se ejecutan la primera vez que se crea una instancia. En ese caso, se ejecutan los inicializadores estáticos antes de el constructor se ejecuta.

Si una clase tiene más de un inicializador estático, los inicializadores se ejecutan en el orden en el que aparecen en el programa.

He aquí un ejemplo de una clase que contiene un inicializador estático:

clase StaticInit {int public static-x estática {x = 32 -} // otros miembros de la clase, como constructores y // métodos van aquí ...}

Este ejemplo es bastante trivial. De hecho, se puede lograr el mismo efecto simplemente asignando el valor 32 a la variable cuando se declara. Si, sin embargo, había que realizar un cálculo complicado de determinar el valor de X - o si su valor viene de una base de datos - un inicializador estático podría ser muy útil.




» » » » Cómo utilizar inicializadores estáticos en Java