Categorías
Classes & Interfaces

¿Qué es Instance Initializer en Java?

En esta publicación, ilustraré qué son el inicializador de variable de instancia, el inicializador de instancia, el inicializador estático y cómo funciona el inicializador de instancia en Java.

1. Orden de ejecución

Mira la siguiente clase, ¿sabes cuál se ejecuta primero?

public class Foo {
 
	//instance variable initializer
	String s = "abc";
 
	//constructor
	public Foo() {
		System.out.println("constructor called");
	}
 
	//static initializer
	static {
		System.out.println("static initializer called");
	}
 
	//instance initializer
	{
		System.out.println("instance initializer called");
	}
 
	public static void main(String[] args) {
		new Foo();
		new Foo();
	}
}

Producción:

static initializer called
instance initializer called
constructor called
instance initializer called
constructor called

2. ¿Cómo funciona el inicializador de instancias de Java?

El inicializador de instancia anterior contiene una declaración println. Para entender cómo funciona, podemos tratarlo como una declaración de asignación de variable, por ejemplo, b = 0. Esto puede hacer que sea más obvio de entender.

En vez de

int b = 0

, podemos escribirlo como

int b;
b = 0;

Por lo tanto, los inicializadores de instancia y los inicializadores de variable de instancia son prácticamente lo mismo.

3. ¿Cuándo son útiles los inicializadores de instancia?

El uso de inicializadores de instancia es poco común, pero aún puede ser una alternativa útil a los inicializadores de variables de instancia si:

(1) el código de inicializador debe manejar excepciones
(2) realice cálculos que no se pueden expresar con un inicializador de variable de instancia.

  4 tipos de clases internas de Java

Por supuesto, dicho código podría escribirse en constructores. Pero si una clase tuviera varios constructores, tendría que repetir el código en cada constructor.

Con un inicializador de instancia, puede escribir el código una vez y se ejecutará sin importar qué constructor se use para crear el objeto. (Supongo que esto es solo un concepto y no se usa con frecuencia).

Otro caso en el que los inicializadores de instancia son útiles son las clases internas anónimas, que no pueden declarar ningún constructor en absoluto. (¿Será este un buen lugar para colocar una función de registro?)

Gracias a Heinrich Hartmann por su comentario:

También tenga en cuenta que las clases anónimas que implementan interfaces [1] no tienen constructores. Por lo tanto, los inicializadores de instancia son necesarios para ejecutar cualquier tipo de expresión en el momento de la construcción.

Referencia:
Inicialización de objetos en Java

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *