Java 即使方法超出范围,内部类如何访问方法中的最终变量?
我已经通过许多链接找到了这个答案。我知道Java在语法上不允许在内部类中访问非最终变量。 根据link的说法,我还了解到,即使方法完成且局部变量超出范围,将局部变量设置为final也可以使其保持活动状态 但是,如果一个方法超出了范围,那么将其设置为final将如何允许它在被引用的内部类中处于活动状态呢 我指的是下面的代码Java 即使方法超出范围,内部类如何访问方法中的最终变量?,java,inner-classes,Java,Inner Classes,我已经通过许多链接找到了这个答案。我知道Java在语法上不允许在内部类中访问非最终变量。 根据link的说法,我还了解到,即使方法完成且局部变量超出范围,将局部变量设置为final也可以使其保持活动状态 但是,如果一个方法超出了范围,那么将其设置为final将如何允许它在被引用的内部类中处于活动状态呢 我指的是下面的代码 public class Outer { public static void outerMethod() { int methodVariable =
public class Outer {
public static void outerMethod() {
int methodVariable = 40;
class Inner {
public void innerMethod() {
System.out.println(methodVariable); // This line produces compile time error.
}
}
}
}
如果在调试器中检查
internal
类的实例,您将发现有一个methodVariable
字段:
这并不是唯一可能的实现,但编译器似乎实际上为methodVariable
创建了一个私有字段,并将变量的值复制到那里
这可能也是变量必须是final或实际上是final的原因。如果变量的值发生更改,则无法再与字段的值同步。如果在调试器中检查
内部
类的实例,您将发现methodVariable
有一个字段:
这并不是唯一可能的实现,但编译器似乎实际上为methodVariable
创建了一个私有字段,并将变量的值复制到那里
这可能也是变量必须是final或实际上是final的原因。如果变量的值发生变化,则无法再与字段的值同步。内部的
类有一个对其“作用域”的引用。@Elliott你能详细说明你的答案吗?问题中的代码现在已经编译了,虽然这与您的问题无关,即内部类在方法返回后如何访问变量。internal
类有一个对其“作用域”的引用。@Elliott您能详细说明您的答案吗?问题中的代码现在已经编译了,尽管这与内部类在方法返回后如何访问变量的问题无关。