黑马程序员技术交流社区

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

作者: s476596497    时间: 2014-1-20 22:02
标题: 内部类问题
本帖最后由 s476596497 于 2014-1-21 11:47 编辑

我们知道,内部类最大特点就是可以访问外部类的成员,包括私有的。那为什么当它位于局部时,不可以访问它所在的局部中的变量,除非这个变量被final修饰???

144306cfovgcc2vo6wqv6c.jpg (103.2 KB, 下载次数: 14)

144306cfovgcc2vo6wqv6c.jpg

作者: kkopopo    时间: 2014-1-20 22:07
内部类和外部类其实是处于同一个级别,内部类不会因为定义在方法中就会随着方法的执行完毕而跟随者被销毁。问题就来了,如果外部类的方法中的变量不定义final,那么当外部类方法执行完毕的时候,这个局部变量肯定也就被GC了,然而内部类的某个方法还没有执行完,这个时候他所引用的外部变量已经找不到了。如果定义为final,java会将这个变量复制一份作为成员变量内置于内部类中,这样的话,由于final所修饰的值始终无法改变,所以这个变量所指向的内存区域就不会变。
作者: s476596497    时间: 2014-1-21 11:47
kkopopo 发表于 2014-1-20 22:07
内部类和外部类其实是处于同一个级别,内部类不会因为定义在方法中就会随着方法的执行完毕而跟随者被销毁。 ...

我明白了,感谢大侠




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