
匿名内部类使用外部变量为什么用 final 修饰
发布日期:2021-05-08 00:12:07
浏览次数:23
分类:原创文章
本文共 552 字,大约阅读时间需要 1 分钟。
事实上, 匿名内部类使用外部变量时, 因为匿名内部类和外部变量的生命周期不同, 此时匿名内部类中的该变量其实是原来变量的副本
方法内的外部变量作用域: 当前方法
匿名内部类引用外部变量作用域: 匿名内部类的方法
由此可见, 作用域不同, 即生命周期不同
如果不使用 final
修饰外部变量, 那么在匿名内部类中修改变量引用时, 就会产生歧义, 好像在匿名内部类中可以修改已经不在作用域的外部变量, 然后外部变量的生命周期已经结束
@Test public void test() { // 外部变量 final int i = 0; new Thread() { @Override public void run() { // 匿名内部类引用外部变量 // 此时这里的 i 其实是外面的 i 的副本 // 编译会报错: Cannot assign a value to final variable 'i' i = 10; } }; }
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月22日 00时14分39秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
const与常量,傻傻分不清楚~
2021-05-09
Head First设计模式——迭代器模式
2021-05-09
MongoDB版本及存储引擎区别
2021-05-09
shell echo单行和多行文字定向写入到文件中
2021-05-09
cmp命令
2021-05-09
Linux 磁盘管理(df fu fdisk mkfs mount)
2021-05-09
jQuery的事件绑定与触发 - 学习笔记
2021-05-09
Linux上TCP的几个内核参数调优
2021-05-09
记一次讲故事机器人的开发-我有故事,让机器人来读
2021-05-09
seo 回忆录百度基本概念(一)
2021-05-09
netcore中使用session
2021-05-09
Android 开发学习进程0.25 自定义控件
2021-05-09
多媒体文件格式全解说(下)--图片
2021-05-09
淘宝WAP版小BUG分析
2021-05-09
asp.net打印网页后自动关闭网页【无需插件】
2021-05-09
【Maven】POM基本概念
2021-05-09
【Java思考】Java 中的实参与形参之间的传递到底是值传递还是引用传递呢?
2021-05-09
【设计模式】单例模式
2021-05-09
远程触发Jenkins的Pipeline任务的并发问题处理
2021-05-09