今天面试老师问这题把我给问蒙了 T-T
-------------------------------------------------------------------------------------------------------------
这里的局部变量就是在类方法中的变量,能访问方法中变量的类当然也是局部内部类了。
我们都知道,局部变量在所处的函数执行完之后就释放了,但是内部类对象如果还有引用指向的话它是还存在的。例如下面的代码:
classOuter{
publicstaticvoidmain(String[] args){
Outer out = new Outer();
Object obj = out.method();
}
Object method(){
int locvar = 1;
classInner{
voiddisplayLocvar(){
System.out.println("locvar = " + locvar);
}
}
Object in = new Inner();
returnin;
}
}
当out.method()方法执行结束后,局部变量 locvar 就消失了,但是在method()方法中 obj in = new Inner() 产生的 in 对象还存在引用obj,这样对象就访问了一个不存在的变量,是不允许的。这种矛盾是由局部内部类可以访问局部变量但是局部内部类对象和局部变量的生命周期不同而引起的。
局部内部类访问局部变量的机制