Classe interna de método, acesso variáveis

2 respostas
gRoOve

Tenho o seguinte código:

package scjpclassesanonimas;

public class MyOuter {
	private int x = 7;

	void doStuff(){
		final String i = "Variavel local de metodo";

		class MyInner {
			public void seeOuter() {
				System.out.println ("Variavel class externa: " + x);
				System.out.println ("Variavel metodo: " + i);
			}
		}
		new MyInner().seeOuter();
	}
	
	public static void main (String[] args) {
		MyOuter out = new MyOuter();
		out.doStuff();
	}
}

Para eu acessar a variável de método “i”, eu preciso marca-la como final, (pois a mesma está localizada na pilha, e pode durar menos tempo do que um objeto MyInner caso sua referência seja passada para uma variável fora deste escopo) pelo que eu saiba, o modificador final indica que o valor da variável não pode ser alterado. Pergunto: que diferença isto vai fazer neste contexto? A variável vai ficar “viva” até quando se estiver marcada com “final”?

2 Respostas

rogelgarcia

Vai ficar “viva” enquanto tiverem referencias para ela, seja referencia do proprio método onde foi declarada, seja pela classe interna.

Se a variável não for final, vc nem acessa ela dentro da sua classe MyInner.

gRoOve

Achei este tópico onde foi explicado o motivo do final, pra falar a verdade não entendi muito bem a explicação, mas foi o que bastou pra eu apenas decorar isso, tentar entender não vai adiantar muita coisa pra mim neste momento.

Criado 8 de julho de 2011
Ultima resposta 8 de jul. de 2011
Respostas 2
Participantes 2