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 fieldsetting constructorTinyVamos 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 COMPILEprivate 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.