内部类访问局部变量的时候,变量必须加上final修饰。局部变量在所处的函数执行完之后就释放了,但是内部类对象如果还有引用指向的话它是还存在的。(不管变量是不是final,他的生命周期都在于{}中),
class Outer{
public static void main(String[] args){
Outer out = new Outer();
Object obj = out.method();
}
Object method(){
int locvar = 1;
class Inner{
void displayLocvar(){
System.out.println("locvar = " + locvar);
}
}
Object in = new Inner();
return in;
}}
当out.method()方法执行结束后,局部变量 locvar 就消失了,但是在method()方法中 obj in = new Inner() 产生的 in 对象还存在引用obj,即 内部类对象的生命周期会超过局部变量的生命期。使用final修饰局部变量,方法调用结束,所有的局部变量(含final)全死亡了。但是局部内部类对象中有final型局部变量的拷贝,因而局部内部类对象在变量死亡后,照样可以访问final型局部变量。