事实上, 匿名内部类使用外部变量时, 因为匿名内部类和外部变量的生命周期不同, 此时匿名内部类中的该变量其实是原来变量的副本
方法内的外部变量作用域: 当前方法
匿名内部类引用外部变量作用域: 匿名内部类的方法
由此可见, 作用域不同, 即生命周期不同
如果不使用 final
修饰外部变量, 那么在匿名内部类中修改变量引用时, 就会产生歧义, 好像在匿名内部类中可以修改已经不在作用域的外部变量, 然后外部变量的生命周期已经结束
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15@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 修饰的全部内容,更多相关匿名内部类使用外部变量为什么用内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复