Mágica com static

2 respostas
J
public class A {
	private B b;
	
	public A(){
		b =new B();
		System.out.println("A");
}


public class B {
	
	static {
		System.out.println("B");
	}

}

public class C {
	private A a;
	private B b;
	public C(){
		a = new A();
		b = new B();
		System.out.println("C");
	}
}

public class Main {
	public static void main(String[] args) {
		C c = new C();
	}
}

No meu entendimento erra para sair
BABC, mas a saída é BAC, QUAL A MÁGICA, PQ ELE NÃO CHAMA o construtor new B() duas vezes ? e onde eu posso encontrar uma material explicando isso ?

2 Respostas

Rodrigo_Sasaki

Ele só imprime 1 "B" porque essa impressão está dentro de um bloco de inicialização estático.

Esse bloco é executado quando a classe é carregada pelo Class Loader, e no seu caso isso só acontece uma vez. Para ser impresso 2x teria que ser em um bloco de instância
public class B{

    {
        System.out.println("B");
    }

}
Ou no próprio construtor
public class B{

    public B(){
        System.out.println("B");
    }

}
Segue referência dos tutoriais da Oracle: http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html
A

Parece que a classe A engloba as outras classes, se for assim elas não poderia ser public. Caso estejam em arquivos separados será impresso BAC. Mas tá faltando uma chave de qq forma.

Criado 26 de maio de 2013
Ultima resposta 27 de mai. de 2013
Respostas 2
Participantes 3