黑马程序员技术交流社区

标题: 局部内部类问题疑问 [打印本页]

作者: 窦超    时间: 2011-12-18 09:49
标题: 局部内部类问题疑问
本帖最后由 窦超 于 2011-12-18 10:41 编辑

局部内部类为什么只能访问final局部变量,却可以随便访问成员变量?
作者: 宋双    时间: 2011-12-18 10:10
内部类定义在局部时可以直接访问外部类中的成员,是因为内部类中持有了一个外部类引用,格式为 外部类名.this。当访问它所在的局部中的变量时,只能访问被final修饰的局部变量。
作者: 马伟奇    时间: 2011-12-18 10:17
简单的来说是作用域的问题。就好像方法外面做的事情并不能改变方法内才定义的变量,因为你并不知道方法里面这个时候已经存在了这个局部变量了没有。在这个内部类中方法里面的本地变量是失效的,也就是不在作用域内,所以是不能够访问的

作者: 黑马_孙万春    时间: 2011-12-18 10:22
因为内部类虽然在方法内部,但是它有自己的存活时间,而方法调用完之后里面的局部变量就消失了
而用final修饰其值不能更改,相当于在内部类中创建了一个相同的变量,这个变量就不会随着方法的结束而消失了

作者: 段波    时间: 2011-12-18 10:26
这是由于它们的存活时间导致的:
      内部类的实例可以在方法结束后依然存活,局部变量在方法结束后却无法存活,所以在内部类中无法访问NON-final的局部变量;如果说加了final修饰就相当于一个常量,生命同期延长,于是便可以访问。
而成员变量的存活时间是取决于外部类的实例的,内部类实例中都会引用当前外部类实例,所以他们拥有一致的生命周期,于是可以访问成员变量。


作者: 刘健    时间: 2011-12-18 11:47
在内部类执行的时候,成员变量还是存在的,但是局部变量有可能已经被垃圾回收系统收回,所以不能访问,而final的局部变量不会被垃圾回收系统收回,所以可以访问




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