黑马程序员技术交流社区
标题:
求教,内部类问题?
[打印本页]
作者:
曾经的迷失
时间:
2014-2-25 12:54
标题:
求教,内部类问题?
内部类定义在类局部时,为什么只能访问该局部被final修饰的局部变量?
作者:
swqsljy
时间:
2014-2-25 13:42
因为生命周期的原因。方法中的局部变量,方法结束后这个变量就要释放掉,final保证这个变量始终指向一个对象。
如果定义为final,java会将这个变量复制一份作为成员变量内置于内部类中,这样的话,由于final所修饰的值始终无法改变,所以这个变量所指向的内存区域就不会变。
作者:
Maple
时间:
2014-2-25 16:59
如果没有final的话,那么内部类使用的外部类局部变量要用哪个值呢?
使用内部类经常是用在Listener这样的。
而Listener中的监听函数被调用时,大部分情况,new内部类所在的函数早就执行完了,此时外部类局部变量早就不存在了。
而加上final后,编译器是这样处理内部类的。如果这个外部局部变量是常量,则在内部类代码中直接用这个常量。如果是类的实例,则编译器将产生一个内部类的构造参数,将这个final变量传到内部类里,这样即使外部局部变量无效了,还可以使用。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2