为什么本地内部类需要局部变量Final?此变量与Local Inner类定义的方法相同

时间:2014-11-08 16:32:01

标签: java inner-classes

为什么本地内部类需要局部变量Final?此变量与Local Inner类定义的方法相同。 如果我们不使用final关键字,则会出现编译错误。 Please check the following program on ideone

class LocalInnerClassTest2 {
    private String x="Outer2";
    public static void main(String [] args){
        LocalInnerClassTest2 test=new LocalInnerClassTest2();
        test.doStuff();
    }
    void doStuff(){

//为什么要关注局部变量" final String z"需要最终关键字

    final String z="local variable";
    class MyInner {
        public void seeOuter(){
            System.out.println("Outer x is "+x);
            System.out.println("Local variable z is "+z);
        }
    }
    MyInner my=new MyInner();
    my.seeOuter();
}
}

1 个答案:

答案 0 :(得分:1)

因为内部类获取了实例化时可用的环境副本。

如果您未将z声明为最终版,则可能会出现以下情况:

  String z = "variable";

  class MyInner {
        public void seeOuter(){
            System.out.println("Outer x is "+x);
            System.out.println("Local variable z is "+z);
        }
    }
  MyInner my=new MyInner();

  z = "another value";

  my.seeOuter();

MyInner的上下文是在实例化时创建的,因此这会导致seeOuter访问z的不同值(在更改之前绑定),这会产生误导(因为你不指望它而错了。