Boa tarde a todos… Estou estudando para certificação e me deparei com a seguinte dúvida, a partir do código abaixo:
class A{
final String n;
A(){
System.out.println("Impressão da variável membro n(que não foi explicitamente inicializada), dentro do construtor, antes da inicialização: "+n);
a();
n = "aprendendo";
System.out.println("Impressão da variável membro n(que não foi explicitamente inicializada), dentro do construtor, após inicilização: "+n);
}
void a(){
System.out.println("testa");
}
}
class B extends A{
public static void main(String args[]){
new A();
}
}
Antes de qualquer objeto ser construído, há o “empilhamento” da cadeia de construtores até Object, correto? Quando a pilha estiver em Object começam as inicializações explícitas de cada classe( caso haja ) e, em seguida, a chamada efetiva aos respectivos construtores, descendo a pilha.
No caso da minha variável membro “n” eu consigo imprimí-la, dentro do meu construtor com seu valor de inicialização default. No entanto, quando a mesma é “final”, eu recebo um erro de compilação: "variable n might not have been initialized
System.out.println("Impressão da variável membro n(que não foi explicitamente inicializada), dentro do construtor, antes da inicialização: “+n);
”
Bom, meu raciocínio em relação à construção dos objetos está correto?
Por quê ocorre erro de compilação quando a variável membro é final. Além disso, este erro não ocorre após eu ter inicializado minha variável( n = “aprendendo”; ). Ou seja, o código compila e executa caso comente a primeira instrução do construtor da classe A.
Obrigado e abs!