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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 原满 中级黑马   /  2013-5-30 18:53  /  1285 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 原满 于 2013-5-31 10:36 编辑

局部内部类访问局部变量时,局部变量一定要用final修饰, 为什么一定要用final修饰呢?

4 个回复

倒序浏览
这是因为局部变量的生命周期原因:内部类对象的生命周期会超过局部变量的生命期,内部类对象访问出错
局部变量的生命期:当该方法被调用时,该方法中的局部变量在栈中被创建,当方法调用结束时,退栈,挂了。
而内部类对象生命期:与其它类一样,当创建一个局部内部类对象后,只有当没有其它人再引用它时,被垃圾回收,它才挂掉了
加上final修饰后,通过将final局部变量"复制"一份,复制品直接作为局部内中的数据成员,局部变量挂掉,还有拷贝呢。

评分

参与人数 1技术分 +1 收起 理由
刘胜寒 + 1

查看全部评分

回复 使用道具 举报
littlefoxtail 发表于 2013-5-30 19:33
这是因为局部变量的生命周期原因:内部类对象的生命周期会超过局部变量的生命期,内部类对象访问出错
局部 ...

{:soso_e179:}
回复 使用道具 举报
内部类定义在局部时:
1、不可以被成员修饰符修饰(比如private,static)
2、可以直接访问外部类中的成员,因为还持有外部类中的引用,但是不可以访问它所在的局部中的变量,只能访问被final修饰的局部变量。。。


是因为访问受限制所以必须final修饰吧?嘿嘿
回复 使用道具 举报
如果问题已解决,请及时修改分类,否则继续提问,谢谢合作!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马