我是靠谱客的博主 机智皮皮虾,最近开发中收集的这篇文章主要介绍匿名内部类使用外部变量为什么用 final 修饰,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

事实上, 匿名内部类使用外部变量时, 因为匿名内部类和外部变量的生命周期不同, 此时匿名内部类中的该变量其实是原来变量的副本

方法内的外部变量作用域: 当前方法
匿名内部类引用外部变量作用域: 匿名内部类的方法
由此可见, 作用域不同, 即生命周期不同

如果不使用 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;
}
};
}

最后

以上就是机智皮皮虾为你收集整理的匿名内部类使用外部变量为什么用 final 修饰的全部内容,希望文章能够帮你解决匿名内部类使用外部变量为什么用 final 修饰所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(87)

评论列表共有 0 条评论

立即
投稿
返回
顶部