Boa tarde Pessoal
Gostaria de tirar uma dúvida no seguinte código abaixo
- SuperClasse:
public class StaticSuper {
static {
System.out.println("Super Static block");
}
StaticSuper() {
System.out.println("Super Constructor");
}
}
- SubClasse:
public class StaticTests extends StaticSuper {
static int rand;
static {
rand = (int) (Math.random() * 6 );
System.out.println("Static block" + rand);
}
StaticTests() {
System.out.println("constructor");
}
public static void main(String[] args) {
System.out.println("in main");
StaticTests st = new StaticTests();
}
}
Bem a minha dúvida é o seguinte, sei que quando instancio um objeto de uma subclasse o construtor da superClasse é chamada primeiro e assim sucessivamente até o topo da hierarquia, sei também que um bloco static e sempre executado antes da criação do objeto.
O código acima exibe primeiro as instruções do bloco static da superClasse em seguida o bloco static da subclasse só depois as instruções contidas nos construtores. Não entendi como a VM entendi que existe um bloco static em uma classe acima.
Obrigado.