cara…
1º - use as tags “code” do forum …ajuda muito…fica mais facil de visualizar
class SuperInicializacao{
SuperInicializacao() {
System.out.print("A");
}
{
System.out.print("B");
}
static{
System.out.print("C");
}
}
public class Inicializacao extends SuperInicializacao {
Inicializacao( ) {
System.out.print("D");
}
{
System.out.print("E");
}
static{
System.out.print("F");
}
public static void main( String [ ] args) {
Inicializacao in = new Inicializacao( );
}
}
naum é ?
agora vou tentar explicar ki raios ta acontecendo ae
Cara o que vc tem nas classe abaixo são blocos de codigo static e de instancia.
Bom, td o que static pertence a classe não a instancia… vc não precisar ter um objeto
para acessar um metodo, atributo ou bloco static…
um bloco e executado durante o carregamento da instancia e no caso
de um bloco estatico, carregado pelo classloader, assim que a jvm passa
a "conhecer" a classe…
então o fluxo desta executcao ficaria assim
Inicializacao in = new Inicializacao( );
aqui a o classloader carrega a classe Inicializacao e sua hierarquia de classe…(SuperInicializacao >> Object)
enato aqui o bloco estatico é executado…
static{
System.out.print("C");
}
depois o bloco estatico da classe Inicializacao (respeitando a hierarquia)
static{
System.out.print("F");
}
agora ele cria a instancia e executa os bloco não estaticos e os construtores das respectivas classe
superclasse
bloco
{
System.out.print("B");
}
construtor
SuperInicializacao() {
System.out.print("A");
}
subclasse
bloco
{
System.out.print("E");
}
construtor subclasse
Inicializacao( ) {
System.out.print("D");
}
é , a grosso modo, +/- isso…