Así que he estado revisando mis habilidades Java últimamente y he encontrado algunos bits de funcionalidad que no conocía anteriormente. Inicializadores estáticos y de instancia son dos de esas técnicas.Uso de inicializadores vs constructores en Java
Mi pregunta es ¿cuándo se usaría un inicializador en lugar de incluir el código en un constructor? He pensado en un par de posibilidades obvias:
inicializadores estáticos/instancia se pueden utilizar para establecer el valor de las variables de instancia "finales" estáticas/mientras que un constructor no puede
inicializadores estáticos se puede utilizar para establecer el valor de las variables estáticas en una clase, que debería ser más eficiente que tener un "si (someStaticVar == null) // hacer cosas" bloque de código en el inicio de cada constructor
Tanto de estos casos se supone que el código requiere d para establecer estas variables es más complejo que simplemente "var = value", ya que de lo contrario no parece haber ninguna razón para usar un inicializador en lugar de simplemente establecer el valor al declarar la variable.
Sin embargo, si bien estas ganancias no son triviales (especialmente la capacidad de establecer una variable final), parece que hay un número bastante limitado de situaciones en las que se debe utilizar un inicializador.
Ciertamente, puede utilizar un inicializador para mucho de lo que se hace en un constructor, pero realmente no veo la razón para hacerlo. Incluso si todos los constructores de una clase comparten una gran cantidad de código, el uso de una función de inicialización privada() parece tener más sentido para mí que utilizar un inicializador porque no lo bloquea para que se ejecute ese código al escribir un nuevo constructor.
¿Echo de menos algo? ¿Hay alguna otra situación en la que se debe usar un inicializador? ¿O es realmente una herramienta bastante limitada para ser utilizada en situaciones muy específicas?
Desde inicializadores de instancia son una característica poco conocida, aquí está un ejemplo para ayudar a los lectores: 'privada final int somevar; {somevar = 2;} '(nota, sin constructor.) Para más diversión, busque" inicialización de doble llave "(corte de sintaxis). –