Java 为什么我可以从局部方法内部类访问外部非最终变量
当我的朋友运行此代码时。它报告了一个编译错误,说it315必须是最终版本,这和书上说的一样。然而,当我在eclipse中运行它时,它完全没有问题。我可以访问它315,即使它不是最终版本。我只是想知道为什么Java 为什么我可以从局部方法内部类访问外部非最终变量,java,Java,当我的朋友运行此代码时。它报告了一个编译错误,说it315必须是最终版本,这和书上说的一样。然而,当我在eclipse中运行它时,它完全没有问题。我可以访问它315,即使它不是最终版本。我只是想知道为什么 public class InOut { String str=new String("between"); public void amethod(final int iArgs){ int it315= 10; class Bicycl
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);
}
}
在Java8中,您可以访问“有效的final”变量(未声明为final,但实际上未修改)。似乎您的朋友正在使用Java 7(或更早版本)编译器,而您的Eclipse安装配置为使用Java 8。原因是,为了避免在内部类访问该变量时更改该变量的值。 编译器将变量的值复制到内部类变量,这就是原因
至于你的朋友为什么会担心出错,我想,@Tagir-answer是合乎逻辑的,你的意思是:“当我的朋友编译这段代码时”,是吗?是的。他不能编译这段代码。它报告了无法访问非最终变量的错误。我们在谈论哪个Java版本?