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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杜成龙 中级黑马   /  2013-5-25 15:51  /  1862 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杜成龙 于 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,谢谢!

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

6 个回复

倒序浏览
你这个代码我看的有点纠结,好高深的代码你这个Y,是定义在方法里面的,你这个类又定在方法里面了,那个Y只有方法运行的时候生效,其他时候不可访问!
回复 使用道具 举报
先顶再看,建议楼主以后代码有层次感一点。方便阅读,这样很难看的。
回复 使用道具 举报
你的内部类定义在了外部类的成员函数内;

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

并且这时内部类调用函数中的局部变量 y ,是不能用 this.y 的,直接改为 y 即可;当然前提是y必须用 final 修饰;
回复 使用道具 举报
  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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
内部类访问外部类的局部变量, 此局部变量必须被final修饰才可以。 被修饰后也就是一个常量了。 还有你那个this用的莫名其妙,你的内部类里根本没有y,this只在本类中有效,你搞个this有什么用啊。
回复 使用道具 举报
王靖远 发表于 2013-5-25 16:14
内部类访问外部类的局部变量, 此局部变量必须被final修饰才可以。 被修饰后也就是一个常量了。 还有你那个 ...


6楼的哥们,回答的相当透彻,赞一个,建议版主给技术分......^_^
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马