gpt4 book ai didi

java - 为什么局部内部类需要局部变量Final?该变量与本地内部类定义的方法相同

转载 作者:行者123 更新时间:2023-12-01 12:19:04 26 4
gpt4 key购买 nike

为什么局部内部类需要局部变量Final?该变量与本地内部类定义的方法相同。 如果我们不使用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关键字

    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 声明为 Final,则可能会遇到如下情况:

  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 的不同值(在它之前绑定(bind))已更改),这会产生误导(而且是错误的,因为您没有预料到它)。

关于java - 为什么局部内部类需要局部变量Final?该变量与本地内部类定义的方法相同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26819386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com