Java 即使方法超出范围,内部类如何访问方法中的最终变量?

Java 即使方法超出范围,内部类如何访问方法中的最终变量?,java,inner-classes,Java,Inner Classes,我已经通过许多链接找到了这个答案。我知道Java在语法上不允许在内部类中访问非最终变量。 根据link的说法,我还了解到,即使方法完成且局部变量超出范围,将局部变量设置为final也可以使其保持活动状态 但是,如果一个方法超出了范围,那么将其设置为final将如何允许它在被引用的内部类中处于活动状态呢 我指的是下面的代码 public class Outer { public static void outerMethod() { int methodVariable =

我已经通过许多链接找到了这个答案。我知道Java在语法上不允许在内部类中访问非最终变量。 根据link的说法,我还了解到,即使方法完成且局部变量超出范围,将局部变量设置为final也可以使其保持活动状态

但是,如果一个方法超出了范围,那么将其设置为final将如何允许它在被引用的内部类中处于活动状态呢

我指的是下面的代码

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您能详细说明您的答案吗?问题中的代码现在已经编译了,尽管这与内部类在方法返回后如何访问变量的问题无关。