黑马程序员技术交流社区

标题: 为什么这里需要加final [打印本页]

作者: iFmmer    时间: 2015-6-27 12:22
标题: 为什么这里需要加final
final Iterator<FileInputStream> it = al.iterator();
               
                Enumeration<FileInputStream> en = new Enumeration<FileInputStream>() {
                        public boolean hasMoreElements(){
                                return it.hasNext();
                        }
                        public FileInputStream nextElement(){
                                return it.next();
                               
                        }
                };
老师说这是因为匿名内部类所以要加final。
我在网上搜网上说”这里使用final修饰,是为后面的匿名内部类方便访问提供条件“。
我在myeclipse里 不加final会报错,所以说为啥是方便访问而不是不加会导致什么?
我觉得是我学的不够细致,之前的知识没有学好导致成这样的,有没有大神讲解一下这个。。


作者: 1千克=1024克    时间: 2015-6-27 14:44
以为匿名内部类中访问了迭代器   it的生命周期是作用域结束  而内部类相当于对象  在使用完后不会立刻消失 会等待GC回收  这就会造成 it消失了 而内部类中还要调用it  会出问题   所以使用final 延长it的生命周期
作者: wenxueaaa555    时间: 2015-6-27 15:10
这个我也没怎么看懂,不知道哎
作者: iFmmer    时间: 2015-6-27 15:49
1千克=1024克 发表于 2015-6-27 14:44
以为匿名内部类中访问了迭代器   it的生命周期是作用域结束  而内部类相当于对象  在使用完后不会立刻消失  ...

哦哦!原来如此!我明白了!谢谢你!
作者: 安安安    时间: 2015-6-27 17:00
2楼说的很对。。
在局部内部类中访问局部变量要加final
作者: GiveUp    时间: 2015-6-27 20:55
jdk 1.8好像可以不加




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