[Resolvido] Acesso à variável membro final

4 respostas
B

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!

4 Respostas

rmendes08

O erro de compilação ocorre justamente porque você é obrigado a inicializar uma variável final. A variável pode ser inicializada inline ou no construtor, mas tem que ser inicializada, obrigatoriamente.

A

Exatamente. Está certo o que o rmendes08 falou só que neste caso específico a variavel final está sendo inicializada dentro de um construtor… só que ela é usada antes de ser inicializada dentro do construtor. Se colocássemos a chamada ao método a() depois da inicializacao estaria ok.

B

Obrigado Pessoal!!!
Como faço para fechar este post?

Grande Abs.

igor_ks

Opa, só mudar o tópico para [Resolvido] Acesso à variável membro final

Criado 1 de julho de 2015
Ultima resposta 2 de jul. de 2015
Respostas 4
Participantes 4