A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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.         }
复制代码


为什么方法中的内部类能访问方法中的局部变量,很疑惑,其深层次的原因是什么啊 ???

点评

原因不详,不过只要在局部变量前面加final修饰就可以访问了  发表于 2014-4-11 18:08

3 个回复

倒序浏览
因为方法中的局部变量保存在堆栈中,方法运行结束后,栈中的内存就会被回收,而类的生命周期大于方法的生命周期,假如方法运行结束后,方法里的类还需要引用局部变量,就会出现异常,因为局部变量已经被系统回收,典型的例子就是将方法中的类作为返回值返回,假如这个类需要引用方法里的局部变量,就会出现异常。加final的话,方法里的类就能访问方法里的局部变量了,因为这时编译器会把局部变量复制到常量区,方法运行结束后这个变量还是可以访问的

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
yanzhendong 发表于 2014-4-11 18:29
因为方法中的局部变量保存在堆栈中,方法运行结束后,栈中的内存就会被回收,而类的生命周期大于方法的生命 ...

谢谢你了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马