即使方法超出范围,Inner class 如何访问方法中的最终变量?

How final variables in method can be accessed by Inner class even if method goes out of scope?

为了这个答案,我已经经历了很多 link。而且我知道语法上 Java 不允许在 Inner 类 中访问非最终变量。 根据 this link,我还了解到,即使方法完成且局部变量超出范围,使局部变量成为 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.
            }
        }
    }
}

如果您在调试器中检查 Inner class 的实例,您会发现 methodVariable:

有一个字段

并不是说它是唯一可能的实现,但似乎编译器实际上为 methodVariable 创建了一个私有字段并将变量的值复制到那里。

这可能也是变量必须是最终变量或有效最终变量的原因。如果变量的值发生变化,则无法再与字段的值同步。