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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© wuhyoung 中级黑马   /  2014-6-5 20:26  /  1144 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

方法中的内部类为什么不能访问方法中的局部变量,内部类为什么能够访问成员变量

6 个回复

倒序浏览
局部变量和成员变量对于内部类而言,具有一定的共性,都是该内部类外面的变量。如果要求内部类只能访问final的局部变量是为了确保局部变量不被修改的话,那么内部类访问成员变量应该也有类似的限制才对     我认为是由于他们的存活范围导致了这个区别: 首先内部类的实例可以在方法结束后依然存活,局部变量在方法结束后却无法存活,所以在内部类中无法访问NON-final的局部变量; 而成员变量的存活时间是取决于外部类的实例的,内部类实例中都会引用当前外部类实例,所以他们拥有一致的生命周期,于是可以访问成员变量。

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
枫桥夜泊 发表于 2014-6-5 20:34
局部变量和成员变量对于内部类而言,具有一定的共性,都是该内部类外面的变量。如果要求内部类只能访问fina ...

既然内部类是方法中的,那么内部类只能被方法中的变量实例化,能够被方法外被访问吗?
回复 使用道具 举报
楼主,对于个这个问我觉的,你应该先分清,内部类的几种形式。方法中的内部类和方法中变量,是随着那个方法调用产生对象的。变量当然也会方法的消失而消失。但是方法中的内部类的对象并一定会消失。这是对象调用变量的是就找不到了。但是被final 修饰之后,就可以看成常量了。常量就可以调用。可以这么理解。
回复 使用道具 举报
简单说是因为它只看到了方法名,而看不到方法中的局部变量。
回复 使用道具 举报
我来学习了!!!!!!!!!!!!!!!!!
回复 使用道具 举报
外部类的成员变量声明周期至少是大于内部类的成员变量的生命周期的
外部类方法中的局部变量的生命周期是栈内存的生命周期使用完成就释放的
不加final关键字的话会引起内部类访问一个生命结束的变量
当然不行了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马