当我的朋友运行这段代码时。它报告一个编译错误,说它315必须是最终的,它与书上所说的相同。但是,当我在日食中运行它时,它根本没有问题。我可以访问它315,即使它不是最终的。 我只是想知道为什么。
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);
}
}
在Java 8中,你可以访问"有效最终"变量(这些变量没有声明为final,但实际上没有修改)。似乎您的朋友正在使用 Java 7(或更早版本)编译器,而您的 Eclipse 安装配置为使用 Java 8。
原因是,为了避免该变量的值更改,而内部类正在访问该变量。编译器将变量的值复制到内部类变量,这就是原因。
至于为什么你的朋友有错误问题,我想,@Tagir答案是合乎逻辑的,