黑马程序员技术交流社区
标题:
为什么方法中的内部类不能访问方法中的局部变量?
[打印本页]
作者:
759345779
时间:
2014-4-11 18:05
标题:
为什么方法中的内部类不能访问方法中的局部变量?
class Outer{
void OuterMethod(){
int x = 2;
class Inner{
void InnerMethod(){
System.out.println(x);
}
}
new Inner().InnerMethod();
}
}
public static void main(String[] args) {
new Outer().OuterMethod();
}
复制代码
为什么方法中的内部类能访问方法中的局部变量,很疑惑,其深层次的原因是什么啊 ???
作者:
yanzhendong
时间:
2014-4-11 18:29
因为方法中的局部变量保存在堆栈中,方法运行结束后,栈中的内存就会被回收,而类的生命周期大于方法的生命周期,假如方法运行结束后,方法里的类还需要引用局部变量,就会出现异常,因为局部变量已经被系统回收,典型的例子就是将方法中的类作为返回值返回,假如这个类需要引用方法里的局部变量,就会出现异常。加final的话,方法里的类就能访问方法里的局部变量了,因为这时编译器会把局部变量复制到常量区,方法运行结束后这个变量还是可以访问的
作者:
759345779
时间:
2014-4-11 19:22
yanzhendong 发表于 2014-4-11 18:29
因为方法中的局部变量保存在堆栈中,方法运行结束后,栈中的内存就会被回收,而类的生命周期大于方法的生命 ...
谢谢你了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2