Ordem de Inicialização
Ao escrever códigos que inicializam campos em vários lugares, você deve acompanhar a ordem de inicialização. Adicionaremos mais algumas regras à ordem de inicialização nos capítulos 4 e 5. Enquanto isso, você precisa lembrar que:
■ Os campos e os blocos inicializadores de instância são executados na ordem em que aparecem o arquivo.
■ O construtor é executado depois que todos os campos e blocos de inicialização de instância são executados.
Vamos ver um exemplo:
1: public class Chick {
2: private String name = "Fluffy";
3: { System.out.println("setting field"); }
4: public Chick() {
5: name = "Tiny";
6: System.out.println("setting constructor");
7: }
8: public static void main(String[] args) {
9: Chick chick = new Chick();
10: System.out.println(chick.name); } }
Executar este exemplo imprime isso:
setting field
setting constructor
Tiny
Vamos ver o que está acontecendo aqui. Começamos com o método main() porque é onde o Java inicia a execução. Na linha 9, chamamos o construtor de Chick. Java cria um novo objeto. Primeiro, ele inicializa o nome para "Fluffy" na linha 2. Em seguida, ele executa a instrução print no inicializador de instância na linha 3. Depois que todos os campos e inicializadores de instância são executados, Java retorna ao construtor. A linha 5 altera o valor do nome para "Tiny" e a linha 6 imprime outra instrução. Neste ponto, o construtor é executado e retorna ao comando print na linha 10.
A ordem é importante para os campos e blocos de código. Você não pode se referir a uma variável antes que ela seja inicializada:
{ System.out.println(name); } // DOES NOT COMPILE
private String name = "Fluffy";
Você deve esperar para ver uma pergunta sobre a inicialização no exame. Vamos tentar mais um. O que você acha que esse código imprime?
public class Egg {
public Egg() {
number = 5;
}
public static void main(String[] args) {
Egg egg = new Egg();
System.out.println(egg.number);
}
private int number = 3;
{ number = 4; }
}
Se você respondeu 5, você acertou. Campos e blocos são executados primeiro, definindo o number para 3 e, em seguida, 4. Em seguida, o construtor é executado, definindo o número para 5.