黑马程序员技术交流社区
标题:
final关键字
[打印本页]
作者:
王希悦
时间:
2015-1-15 13:47
标题:
final关键字
内部类访问外部类成员是,为什么内部类只能访问被final修饰的局部变量,不可以访问它所在局部中变量啊
作者:
诺诺
时间:
2015-1-15 17:58
个人理解 如果没final修饰,当类进内存的时候,这货还不知道在哪里呢,咋访问,类似于静态吧
作者:
cgsilen
时间:
2015-1-15 18:27
视频里将了吧,生命周期不同
作者:
7788665544
时间:
2015-1-15 21:30
内部类的生命周期可能会比局部变量的生命周期长;用final修饰符修饰局部变量后, 局部变量的生命周期会延长
作者:
qq306149769
时间:
2015-1-15 21:44
局部变量随着方法的调用而存在,随着方法的结束而结束。
成员变量随着对象的存在,随着对象的小时而小时!
作者:
lwj123
时间:
2015-1-15 21:56
这里说的是局部内部类吧,final修饰的变量是不会改变的,即使内部类所在的方法释放了,也不会可以访问这个变量
作者:
邓士林
时间:
2015-1-15 21:59
这个问题,论坛都问很多了,而且问这个问题还加技术分了,我真是醉了
作者:
眷恋从前的日子
时间:
2015-1-15 22:23
原因:
一, 当方法被调用运行完毕之后,局部变量就已消亡了。但内部类对象可能还存在,
直到没有被引用时才会消亡。此时就会出现一种情况,就是内部类要访问一个不存在的局部变量。
二,解决这一问题的办法就是使用final修饰局部变量,通过将final局部变量"复制"一份,
复制品直接作为方法内部类中的数据成员,这事方法内部类访问的其实是这个局部变量的复制品!
而且,由于被final修饰的变量赋值后不能再修改,所以就保证了复制品与原始变量的一致。
三,原因二的功能能实现的原因是:Java采用了一种copy local variable(复制局部变量)的方式来实现,
也就是说把定义为final的局部变量拷贝过来用,而引用的也可以拿过来用,只是不能重新赋值。
从而造成了可以access local variable(访问局部变量)的假象,而这个时候由于不能重新赋值,
所以一般不会造成不可预料的事情发生。
四, 使用final修饰符不仅会保持对象的引用不会改变,
而且编译器还会持续维护这个对象在回调方法中的生命周期.
所以这才是final变量和final参数的根本意义.
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2