为什么我可以从局部方法内部类访问外部非最终变量



当我的朋友运行这段代码时。它报告一个编译错误,说它315必须是最终的,它与书上所说的相同。但是,当我在日食中运行它时,它根本没有问题。我可以访问它315,即使它不是最终的。 我只是想知道为什么。

public class InOut {
    String str=new String("between");
    public void amethod(final int iArgs){
        int it315= 10;
        class Bicycle{
            public void sayHello(){
                System.out.println(str);
                System.err.println(iArgs);
                System.out.println(it315);
            }

        }
        Bicycle  cBicycle=new Bicycle();
        cBicycle.sayHello();
    }
    public static void main(String[] args) {
        new InOut ().amethod(999);
    }
}

在Java 8中,你可以访问"有效最终"变量(这些变量没有声明为final,但实际上没有修改)。似乎您的朋友正在使用 Java 7(或更早版本)编译器,而您的 Eclipse 安装配置为使用 Java 8。

原因是,为了避免该变量的值更改,而内部类正在访问该变量。编译器将变量的值复制到内部类变量,这就是原因。

至于为什么你的朋友有错误问题,我想,@Tagir答案是合乎逻辑的,

最新更新