除非标记了这些局部变量,否则在方法内部定义的内部类无法访问方法的局部变量。final
我查看了堆栈溢出和 java 代码牧场中的其他帖子,但似乎没有一个完全回答关于如何标记的问题variables 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
?我相信所有的局部变量最终或不是都存储在堆栈中。当方法从堆栈中删除时,最终变量将随之删除。最终变量中的值是否与堆中的对象一起存储?
它不支持非最终字段,因为它们可以通过方法或类进行更改,并且不支持这是因为实际上有两个不同的字段/变量。