今天专门解决这个语法错误,详细解释一下错误原因,以及修改办法.其实最主要的是从语言设计者的角度考虑,为什么要让这种代码不通过,通过会造成什么后果,这属于比较高级的内容,我暂时想不透彻,只是姑妄言之,权当培养意识了.
翻译:
不能在定义在不同方法中的内部类中找到一个未经final修饰的变量xxx
public class Test{
public static void main (String[] args){
String str1 = "blog";
class InnerClass{
void outputSomething(){
System.out.println(str1);//报错,Can't refer to a non-final variable str1 inside an inner class defined in a different method
}
}
}
}
修改办法:
1.在报错类外的方法(此例是main方法)中,将变量修饰符加上final.
2.在报错类的外部类(此例是Test类)声明变量为静态变量static
设计原因:
挖坑先*******
********
目前只是知道和堆栈有关,应该是防止内部类取到内存空间已经被回收的变量.