黑马程序员技术交流社区

标题: 关于方法中的内部类访问局部变量的问题 [打印本页]

作者: wayne7sk    时间: 2014-3-28 17:04
标题: 关于方法中的内部类访问局部变量的问题
本帖最后由 wayne7sk 于 2014-3-28 18:48 编辑

为什么定义在局部的内部类只能访问被final修饰的局部变量?
作者: 黄晓鑫    时间: 2014-3-28 17:05
不加final也可以 直接加类名.this.成员变量
作者: wayne7sk    时间: 2014-3-28 17:08
黄晓鑫 发表于 2014-3-28 17:05
不加final也可以 直接加类名.this.成员变量

定义在局部的内部类。。方法中的内部类。。也可以么?
作者: 黄晓鑫    时间: 2014-3-28 17:09
那就不行 这个没有必要去纠结 就知道有这么回事就行了
作者: wayne7sk    时间: 2014-3-28 17:11
黄晓鑫 发表于 2014-3-28 17:09
那就不行 这个没有必要去纠结 就知道有这么回事就行了

这样啊。。好吧。。谢谢
作者: 黄晓鑫    时间: 2014-3-28 17:13
不客气 朋友黑马见
作者: wayne7sk    时间: 2014-3-28 17:15
黄晓鑫 发表于 2014-3-28 17:13
不客气 朋友黑马见

好的。。在拼命赶32期。。
作者: 王峰峰    时间: 2014-3-28 17:18
其实就是作用域中变量的生命周期导致的。
首先,内部类和外部类其实是处于同一个级别,内部类不会因为定义在方法中就会随着方法的执行完毕而跟随者被销毁。问题就来了,如果外部类的方法中的变量不定义final,那么当外部类方法执行完毕的时候,这个局部变量肯定也就被GC了,然而内部类的某个方法还没有执行完,这个时候他所引用的外部变量已经找不到了。如果定义为final,java会将这个变量复制一份作为成员变量内置于内部类中,这样的话,由于final所修饰的值始终无法改变,所以这个变量所指向的内存区域就不会变。
作者: wayne7sk    时间: 2014-3-28 17:28
王峰峰 发表于 2014-3-28 17:18
其实就是作用域中变量的生命周期导致的。
首先,内部类和外部类其实是处于同一个级别,内部类不会因为定义 ...

我能理解为被final修饰之后被复制到了堆内存中么
作者: 王峰峰    时间: 2014-3-28 17:37
wayne7sk 发表于 2014-3-28 17:28
我能理解为被final修饰之后被复制到了堆内存中么

我的理解是:它复制了另一份到堆内存中做为成员变量
作者: wayne7sk    时间: 2014-3-28 18:43
王峰峰 发表于 2014-3-28 17:37
我的理解是:它复制了另一份到堆内存中做为成员变量

好的。。谢谢




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