Variavel membro static + final

1 resposta
D

Seguinte...reparem os 3 trechos de codigo a seguir :

1º exemplo :
public class VarFinalandStatic1 {
	private final int i ;	
	
	public VarFinalandStatic1(){
		this.i = 10;
		
	}
	
}
2º exemplo :
class VarFinalandStatic2{
   private static int i ;
	
   public VarFinalandStatic2(){
   	   i = 10;
   }	
	
}
3º xemplo:
class VarFinalandStatic3{
	
	static final int i=10;
	
	public VarFinalandStatic3(){
				
	}
	
}

Gostaria de saber, porque este proximo exemplo..não compilará ..e se isso ocorre pelo fato de eu estar utilizando os modificadores "static" e "final" junto.....

reparando no 3º exemplo..em que é feita uma declaração e atribuição juntas..acaba funcionando OK...

mas porque o simples fato de deixar para inicializar a variavel membro final dentro do construtor( que até aonde eu sabia...era possivel..) faz com que isso nao compile?

se nao for por causa disso... porque então ?

class VarFinalandStatic4{
	
	static final int i;
	
	public VarFinalandStatic4(){
		
		i = 10;
				
	}
	
}

Obrigado pessoal!!!

1 Resposta

Rafael_Steil

Voce somente pode atribuir algum valor a uma variavel “final” uma unica vez - que eh quando voce inicia o valor dela.

As partes “static” do teu codigo - blocos, variaveis - sao iniciadas antes que voce tenha uma instancia da classe, ou seja, antes de voce chamra o construtor.

Juntando as pecas: “static final” faz com que o valor da variavel seja setado para o default - 0 no caso - antes mesmo que voce consiga ter uma instancia da classe, o que ocasiona o erro de compilacao caso voce tente atribuir o valor a essa variavel em algum outro ponto do codigo.

Agora, se voce fizesse

static final int i;

static {
    i = 20;
}

nao daria erro de compilacao.

Rafael

Criado 7 de fevereiro de 2004
Ultima resposta 7 de fev. de 2004
Respostas 1
Participantes 2