Как пометка переменной как 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
? Я верю всемлокальные переменные конечные или нет хранятся в стеке. Когда метод удаляется из стека, последняя переменная будет удалена вместе с ним. Это то, что значение в конечной переменной хранится вместе с объектом в куче?
Он не поддерживает неконечные поля, так как они могут быть изменены ни методом, ни классом, и это не поддерживается, потому что в действительности существуют два разных поля / переменных.