A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 唐志海 中级黑马   /  2014-2-4 12:43  /  1058 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 唐志海 于 2014-2-5 17:11 编辑

当内部类定义在局部的时候要 访问它所在函数的变量,为什么该变量要加fianl修饰?

2 个回复

倒序浏览
在方法中定义的内部类智能访问方法中final类型的局部变量,这是因为在方法中定义的局部变量相当于一个常量,它的生命周期超出运行的生命周期,由于该局部变量被设置为final,所以不能在内部类中改变该局部变量的值。-----在《Java从入门到精通》-209P
回复 使用道具 举报
局部内部类要访问所在方法中的变量会有一个问题:当一个线程执行完方法时,变量内存就会被释放。而此时局部内部类就访问不到变量。为了解决这个问题,类部类在创建时会拷贝一个变量副本。当要访问时,其实访问的是副本。

这时又有另一个问题。当方法中的变量改变了,而局部内部类还是访问的副本。这样数据就不一至了。而解决方法就是final。这样就可以保证数据一至性。
回复 使用道具 举报 1 0
您需要登录后才可以回帖 登录 | 加入黑马