Как пометка переменной как final позволяет внутренним классам получать к ним доступ?

внутренний класс определенный внутри метода не может получить доступ к методуs локальные переменные, если только эти локальные переменные не помеченыfinal.Я'Мы рассматривали другие посты в переполнении стека и ранчо Java-кода, но ни один из них, похоже, не дает точного ответа на вопрос о том, как пометка переменных final позволяет внутреннему классу обращаться к локальным переменным в методе.

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);
    }
}

Пояснения я нашел к этому:

локальные переменные хранятся в стеке и, как только вызов метода завершается, стек всплывает илокальные переменные недоступны, тогда какконечные локальные переменные хранятся враздел данных памяти потенциально позволяяJVM доступ к ним даже после завершения вызова метода. Гдеdata section of memory ? Я верю всемлокальные переменные конечные или нет хранятся в стеке. Когда метод удаляется из стека, последняя переменная будет удалена вместе с ним. Это то, что значение в конечной переменной хранится вместе с объектом в куче?

Он не поддерживает неконечные поля, так как они могут быть изменены ни методом, ни классом, и это не поддерживается, потому что в действительности существуют два разных поля / переменных.

Ответы на вопрос(6)

Ваш ответ на вопрос