方法本地内部类只能访问最终的局部变量。为什么?

可能重复:
为什么内部类需要“最终”外部实例变量[Java]?
为什么在匿名类中只能访问最终变量?

class Outer{ private String x = "instance variable"; void doStuff(){ String z = "local variable"; class Inner{ public void seeOuter(){ System.out.println("Outer x is : "+ x); System.out.println("Local variable z is : " + z); //won't compile } } } } 

将局部变量z标记为final可解决问题:

 final String z = "local variable"; //Now inner object can use it. 

任何人都可以解释发生了什么?

我确切地知道为什么它无法编译以防我尝试访问非最终的局部变量。

即使方法完成且局部变量超出范围,创建局部变量fi​​nal也能保持活着吗?

最终的局部变量是否存储在堆而不是堆栈中?

它们可以使用函数的局部变量和参数,但只能使用声明为final的函数,因为本地类实例必须维护变量的单独副本,因为它可能会超出函数的范围。 为了不在同一范围内混淆两个具有相同名称的可修改变量,该变量被强制为不可修改。

将局部变量z标记为最终修复问题:任何人都可以解释发生了什么?

您有一个方法本地类,允许它在创建它的范围内访问最终的局部变量。

即使方法完成且局部变量超出范围,创建局部变量fi​​nal也能保持活着吗?

最终意味着它无法改变。 没有其他的。

最终的局部变量是否存储在堆而不是堆栈中?

所有变量都在堆栈上分配,最终与否。

我确切地知道为什么它无法编译以防我尝试访问非最终的局部变量。

也许你应该考虑这一点,因为我不清楚这是否是这种情况。

嵌套类可以“访问”最终变量,因为它们会自动复制为对象的字段。 它不支持非final字段,因为它们可以通过方法或类进行更改,但这不受支持,因为实际上有两个不同的字段/变量。