黑马程序员技术交流社区

标题: 内部类访问外部类中的局部变量为什么必须要加final修饰 [打印本页]

作者: xietansheng    时间: 2014-2-25 13:04
标题: 内部类访问外部类中的局部变量为什么必须要加final修饰
内部类访问外部类中的局部变量为什么必须要加final修饰
作者: 张东健    时间: 2014-2-25 13:22
因为是局部变量嘛,可能还没执行到内部类的时候这个变量就被回收了,用finanl使得它的生命周期更长
作者: swqsljy    时间: 2014-2-25 13:28

因为生命周期的原因。方法中的局部变量,方法结束后这个变量就要释放掉,final保证这个变量始终指向一个对象。

如果定义为final,java会将这个变量复制一份作为成员变量内置于内部类中,这样的话,由于final所修饰的值始终无法改变,所以这个变量所指向的内存区域就不会变。

作者: wdtdcm    时间: 2014-2-25 13:52




这好像是是一个规则来的


作者: 一年_Hei    时间: 2014-2-25 13:53
增加局部变量的生命周期
作者: 何苦似梦离    时间: 2014-2-25 15:11
为了增加局部变量存活时间,因为内部类的存活时间可能会比局部存活世界长
作者: Maple    时间: 2014-2-25 15:57
如果没有final的话,那么内部类使用的外部类局部变量要用哪个值呢?
使用内部类经常是用在Listener这样的。
而Listener中的监听函数被调用时,大部分情况,new内部类所在的函数早就执行完了,此时外部类局部变量早就不存在了。
而加上final后,编译器是这样处理内部类的。如果这个外部局部变量是常量,则在内部类代码中直接用这个常量。如果是类的实例,则编译器将产生一个内部类的构造参数,将这个final变量传到内部类里,这样即使外部局部变量无效了,还可以使用。




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