黑马程序员技术交流社区

标题: 帮忙看下这个问题,谢谢! [打印本页]

作者: 杜成龙    时间: 2013-5-25 15:51
标题: 帮忙看下这个问题,谢谢!
本帖最后由 杜成龙 于 2013-5-26 11:14 编辑
  1. class Outer
  2. {
  3. int x=3;
  4. public void show()
  5. {
  6. int y=4;
  7. class Inner
  8. {
  9. void methed()
  10. {
  11. System.out.println(this.y);
  12. }
  13. }
  14. new Inner().methed();
  15. }
  16. }
  17. class Yanzhen
  18. {
  19. public static void main(String[] args)
  20. {
  21. new Outer().show();
  22. }
  23. }
复制代码
各位,有谁能帮忙看下这个程序运行后为什么显示找不到y,谢谢!

作者: 画饼    时间: 2013-5-25 16:05
你这个代码我看的有点纠结,好高深的代码你这个Y,是定义在方法里面的,你这个类又定在方法里面了,那个Y只有方法运行的时候生效,其他时候不可访问!
作者: 王靖远    时间: 2013-5-25 16:05
先顶再看,建议楼主以后代码有层次感一点。方便阅读,这样很难看的。
作者: 蔡增辉    时间: 2013-5-25 16:07
你的内部类定义在了外部类的成员函数内;

y 是外部类成员函数中的局部变量,这时内部类若要调用 y, 必须把 y 用 final 修饰;

并且这时内部类调用函数中的局部变量 y ,是不能用 this.y 的,直接改为 y 即可;当然前提是y必须用 final 修饰;
作者: 王靖远    时间: 2013-5-25 16:12
  1. class Outer
  2. {
  3.         int x=3;
  4.        
  5.         public void show()
  6.         {
  7.                 final int y = 4;
  8.                 class Inner
  9.                 {
  10.                         void methed()
  11.                         {
  12.                                 System.out.println(y);
  13.                         }
  14.                 }
  15.                 new Inner().methed();
  16.         }
  17. }

  18. class Yanzhen
  19. {
  20.         public static void main(String[] args)
  21.         {
  22.                 new Outer().show();
  23.         }
  24. }
复制代码

作者: 王靖远    时间: 2013-5-25 16:14
内部类访问外部类的局部变量, 此局部变量必须被final修饰才可以。 被修饰后也就是一个常量了。 还有你那个this用的莫名其妙,你的内部类里根本没有y,this只在本类中有效,你搞个this有什么用啊。
作者: 棉/mg花/x糖    时间: 2013-5-25 16:31
王靖远 发表于 2013-5-25 16:14
内部类访问外部类的局部变量, 此局部变量必须被final修饰才可以。 被修饰后也就是一个常量了。 还有你那个 ...


6楼的哥们,回答的相当透彻,赞一个,建议版主给技术分......^_^




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2