匿名内部类使用外部变量为什么用 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;            }        };    }
上一篇:es 同步原理
下一篇:redis 主从同步过程

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2025年03月22日 00时14分39秒