Como marcar uma variável como final permite que classes internas acessem-nos?
Aclasse interna definido dentro de um método não pode acessar as variáveis locais do método, a menos que essas variáveis locais estejam marcadasfinal
Eu olhei para outras postagens no estouro de pilha e no rancho de código java, mas nenhuma delas parece estar respondendo exatamente a questão de como marcar variáveis final permite que a classe interna acesse variáveis locais no método.
class MyOuter {
private String x = "Outer";
void fly(final int speed) {
final int e = 1;
class FlyingEquation {
public void seeOuter()
{
System.out.println("Outer x is " + x);
}
public void display()
{
System.out.println(e);// line 1
System.out.println(speed);// line 2
}
}
FlyingEquation f=new FlyingEquation();
f.seeOuter();
f.display();
}
public static void main(String args[])
{
MyOuter mo=new MyOuter();
mo.fly(5);
}
}
Explicações que encontrei para isso:
variáveis locais são armazenados na pilha e assim que a chamada do método termina a pilha é exibida evariáveis locais são inacessíveis enquantovariáveis locais finais são armazenados emseção de dados da memória potencialmente permitindoJVM
para acessá-los, mesmo após o término da chamada do método. Onde estádata section of memory
? Eu acredito em tudovariáveis locais finais ou não são armazenados na pilha. Quando o método é removido da pilha, a variável final será removida com ele. É que o valor na variável final é armazenado com o objeto no heap?
Ele não suporta campos não finais, pois eles podem ser alterados, seja pelo método ou pela classe, e isso não é suportado porque, na realidade, existem dois campos / variáveis diferentes.