黑马程序员技术交流社区

标题: 为什么方法中的内部类不能访问方法中的局部变量? [打印本页]

作者: 759345779    时间: 2014-4-11 18:05
标题: 为什么方法中的内部类不能访问方法中的局部变量?
  1. class Outer{
  2.         void OuterMethod(){
  3.                 int x = 2;
  4.                 class Inner{
  5.                         void InnerMethod(){
  6.                                 System.out.println(x);
  7.                         }
  8.                 }
  9.                 new Inner().InnerMethod();
  10.         }
  11. }

  12. public static void main(String[] args) {
  13.                 new Outer().OuterMethod();

  14.         }
复制代码


为什么方法中的内部类能访问方法中的局部变量,很疑惑,其深层次的原因是什么啊 ???
作者: 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