Java 为什么局部内部类需要局部变量Final?此变量位于本地内部类定义的相同方法中
为什么局部内部类需要局部变量Final?此变量位于本地内部类定义的相同方法中如果我们不使用final关键字,它将给出编译错误。 //为什么后面的局部变量“final String z”需要final关键字Java 为什么局部内部类需要局部变量Final?此变量位于本地内部类定义的相同方法中,java,inner-classes,Java,Inner Classes,为什么局部内部类需要局部变量Final?此变量位于本地内部类定义的相同方法中如果我们不使用final关键字,它将给出编译错误。 //为什么后面的局部变量“final String z”需要final关键字 final String z="local variable"; class MyInner { public void seeOuter(){ System.out.println("Outer x is "+x);
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();
}
}
因为内部类在实例化时会获得环境的副本 如果不将
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
的上下文是在实例化时创建的,因此这将导致seeeouter
访问不同的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();