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

本帖最后由 不走回头路 于 2015-6-13 00:37 编辑
  1. class  InnerClassDemo3
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 new Outer().method();
  6.         }
  7. }

  8. class Outer
  9. {
  10.         int x = 3;
  11.         
  12.         void method()
  13.         {
  14.                 int y = 4;
  15.                 class Inner
  16.                 {
  17.                         void function()
  18.                         {
  19.                                 System.out.println(y);
  20.                         }
  21.                 }
  22.                 new Inner().function();
  23.         }
  24. }
复制代码

5 个回复

倒序浏览
用的是最新版本的JDK
回复 使用道具 举报
本帖最后由 Monster 于 2015-6-10 20:40 编辑

y是局部变量,在所定义的一对{}内都有效。当Outer对象调用method方法时,y就在栈内存中开辟空间,当执行到代码new Inner()时,在同一块栈内存中开辟空间存储Inner对象的堆内存地址,Inner对象调用function方法时会再开辟一块栈内存,用于存储function反法中的局部变量,执行function反法时首先在function反法栈内存中查询y,找不到是再到对内存中寻找,应该还是会报错,如果在定义function方法时传递一个int y参数就不会报错。



回复 使用道具 举报
Monster 发表于 2015-6-10 19:56
y是局部变量,在所定义的一对{}内都有效。当Outer对象调用method方法时,y就在栈内存中开辟空间,当执行 ...

可是你看毕老师视频第9天  第4个视频 00:04:50时有错误,我看了跟老师的代码没区别,但是错误没产生
回复 使用道具 举报

回复 使用道具 举报

我安装了eclipse试了一下,确实有问题,一直用的notepad++,不知道是不是他的原因,反正我这就不显示错误。运行结果就是4.
估计是他的毛病
谢谢了!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马