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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© iFmmer 中级黑马   /  2015-6-27 12:22  /  863 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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会报错,所以说为啥是方便访问而不是不加会导致什么?
我觉得是我学的不够细致,之前的知识没有学好导致成这样的,有没有大神讲解一下这个。。

5 个回复

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

哦哦!原来如此!我明白了!谢谢你!
回复 使用道具 举报
2楼说的很对。。
在局部内部类中访问局部变量要加final
回复 使用道具 举报
jdk 1.8好像可以不加
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马