不能在内部 class 内部使用局部变量。那么为什么这段代码有效呢?

A local variable can't be used inside an inner class. So why does this code work?

我有一个学生正在准备 Java 7 OCP 考试,他向我提出了这个问题。他和我都明白局部变量不能在方法的内部 class 中使用,除非它是最终的,但他向我展示了以下运行良好的代码:

public class TestC195 {

    public static void main(String[] args) {
        TestC195 myObject = new TestC195();
        myObject.doStuff();
    }

    private String x = "Outer 2";

    void doStuff() {
        String z = "local";

        class myInner {
            public void seeOuter() {
                System.out.println("outer: " + x);
                System.out.println("outer: " + z);
            }
        }
        myInner in = new myInner();
        in.seeOuter();

    }

}

输出为:

outer: Outer 2
outer: local

那么我们都缺少什么?

如果您使用 java 8 进行编译,那是因为它实际上是最终的 link here