[转帖]Java内部类调用外部类的一个注意点_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3090 | 回复: 0   主题: [转帖]Java内部类调用外部类的一个注意点        下一篇 
caohang
注册用户
等级:少校
经验:877
发帖:78
精华:0
注册:2013-1-31
状态:离线
发送短消息息给caohang 加好友    发送短消息息给caohang 发消息
发表于: IP:您无权察看 2013-2-4 10:07:26 | [全部帖] [楼主帖] 楼主

今天在写代码的时候,涉及到使用一个内部类去调用外部类方法的问题,总是得不到我想要的结果,后经过DEBUG,才发现哪里出现了问题。现写了一个简单的代码,来重现这个问题。

北京联动北方科技有限公司

打印出来的结果为:

Java代码
北京联动北方科技有限公司北京联动北方科技有限公司北京联动北方科技有限公司

  1. a: 20
  2. a: 0
  3. a: 20


a: 20
a: 0
a: 20

    为什么是这么一个结果呢?我想,对第一个 20,大家应该没有任何意见吧。那么第二个为什么是 0 呢?我一开始一直以为打印出来的应该是 20,所以一直没想通,但看了以下两张 DEBUG 的图之后,大家应该明白为什么了吧。请注意图中的断点,与相应的 InnerClassDemo 的 id。

北京联动北方科技有限公司

北京联动北方科技有限公司

回过头来看第一张图: ② 对应的 InnerClass 中的 test() 方法实际上调用的是 ① 对应的 InnerClassDemo 的 print(),且此时它的 a 的值仍为 0, 而 ④ 对应的InnerClass 中的 test() 方法实际上调用的是 ③ 对应的 InnerClassDemo 的 print(),而它的 a 的值已经经过 setA() 被赋值为了 20。所以,才会出现上面的打印结果。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论