java - todas - tipos de excepciones en programacion
¿Cuál es la razón de ser de este bloque de código en Java? (4)
¿Cuál es la razón para hacer que este tipo de código sea válido en Java? ¿Existe por algún motivo particular o es solo un subproducto de otras decisiones de diseño del lenguaje Java? ¿No puedes usar el consructor para lograr el mismo efecto?
class Student
{
{
System.out.println("Called when Student class is instantiated.");
}
}
Este es un bloque de inicialización. Como mencionó Matt Ball, se copian en cada constructor.
Puede que le interese saber sobre bloques de inicialización estáticos (también en el enlace de Matt):
public class Foo {
static {
System.out.println("class Foo just got initialized!");
}
{
System.out.println("an instance of Foo just got initialized!");
}
}
Se llama bloque de inicialización .
El compilador de Java copia bloques de inicializador en cada constructor. Por lo tanto, este enfoque se puede usar para compartir un bloque de código entre múltiples constructores.
Se llama bloque init . En dicho bloque puede realizar una lógica que sea la misma para todas las construcciones, también puede separar la declaración y la inicialización de los mismos campos.
upd y, por supuesto, la inicialización de llaves dobles , como
List<Integer> answers = new ArrayList<Integer>(){{add(42);}}
Un punto es que ejecutará el constructor que se llame. Si tiene varios constructores y no se llaman entre sí (por cualquier razón, por ejemplo, cada uno que desee llamar directamente a un constructor de superclase correspondiente) esta es una forma de asegurarse de que se ejecuta el mismo código para todos los constructores, sin ponerlo un método que podría llamarse en otro lugar.
También es potencialmente útil cuando estás escribiendo una clase anónima: no puedes escribir un constructor, pero puedes escribir un bloque de inicialización. He visto esto usado para las pruebas de JMock, por ejemplo.