为什么本地内部类需要局部变量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();
}
}
答案 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
的不同值(在更改之前绑定),这会产生误导(因为你不指望它而错了。