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 marcadasfinalEu 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.

questionAnswers(6)

yourAnswerToTheQuestion