黑马程序员技术交流社区

标题: 关于内部类的问题 [打印本页]

作者: wuhyoung    时间: 2014-6-5 20:26
标题: 关于内部类的问题
方法中的内部类为什么不能访问方法中的局部变量,内部类为什么能够访问成员变量

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

既然内部类是方法中的,那么内部类只能被方法中的变量实例化,能够被方法外被访问吗?
作者: 塔罗    时间: 2014-6-5 22:19
楼主,对于个这个问我觉的,你应该先分清,内部类的几种形式。方法中的内部类和方法中变量,是随着那个方法调用产生对象的。变量当然也会方法的消失而消失。但是方法中的内部类的对象并一定会消失。这是对象调用变量的是就找不到了。但是被final 修饰之后,就可以看成常量了。常量就可以调用。可以这么理解。
作者: 何堂红    时间: 2014-6-5 22:33
简单说是因为它只看到了方法名,而看不到方法中的局部变量。
作者: 任黎明    时间: 2014-6-5 22:33
我来学习了!!!!!!!!!!!!!!!!!
作者: 艮昕辶    时间: 2014-6-7 11:19
外部类的成员变量声明周期至少是大于内部类的成员变量的生命周期的
外部类方法中的局部变量的生命周期是栈内存的生命周期使用完成就释放的
不加final关键字的话会引起内部类访问一个生命结束的变量
当然不行了




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