Eu tenho um arquivo chamado Foo.java que possui mais duas classes: Bar e Baz.
Em uma outra classe, eu instancio um objeto Bar:Bar bar = new Bar();
classe Bar inicializada
classe Baz inicializada
Asserts disabled
inicializou classe Bar
construtor Bar
Baz baz = new Baz();
classe Bar inicializada
Asserts enabledaa
inicializou classe Bar
classe Baz inicializada
construtor Bar
construtor Baz
Minha pergunta eh, pq q mesmo instanciando um objeto Baz ele executa primeiro o bloco estatico da superclasse, e so carrega a classe Baz, depois que o bloco estatico de Bar termina. E a segunda pergunta, eh pq q qdo eu instancio um objeto Bar, ele carrega a classe Baz antes mesmo do bloco estatico de Bar ter terminado.
Grato.
Abaixo o codigo da classe Foo.java:
public class Foo {
public Foo() {
}
public static void main(String[] args) {
Baz.testAsserts();
}
}
class Bar {
public Bar () {
System.out.println("construtor Bar");
}
static {
System.out.println("classe Bar inicializada");
Baz.testAsserts();
System.out.println("inicializou classe Bar");
}
}
class Baz extends Bar {
static {
System.out.println("classe Baz inicializada");
}
public Baz () {
System.out.println("construtor Baz");
}
static void testAsserts() {
boolean enabled = false;
assert enabled = true;
System.out.println("Asserts "+(enabled ? "enabledaa" : "disabled"));
}
}
