内部类使用外部类局部变量必须是 final 原因
来源:互联网 发布:爱喝啤酒软件 编辑:程序博客网 时间:2024/06/04 23:30
javac工具在编译的时候会做一些处理,具体会在Inner类里存储一份outer变量的拷贝,Inner类里看得见的实际使用outer的地方,实际上只是用的这个拷贝。
而问题是这个拷贝过程只在Inner类定义时进行一次,如果我们在Inner类定义完后的其他地方改变了outer变量,并不会反应在这份拷贝上面。所以为了防止这种不一致的发生,就用强制给outer变量加final修饰符的方式,把上面那种“如果”给禁止了。
内部类里面使用外部类的局部变量时,其实就是内部类的对象在使用它,内部类对象生命周期中都可能调用它,而内部类试图访问外部方法中的局部变量时,外部方法的局部变量很可能已经不存在了,那么就得延续其生命,拷贝到内部类中,而拷贝会带来不一致性,从而需要使用final声明保证一致性。说白了,内部类会自动拷贝外部变量的引用,为了避免:1. 外部方法修改引用,而导致内部类得到的引用值不一致 2.内部类修改引用,而导致外部方法的参数值在修改前和修改后不一致。于是就用 final 来让该引用不可改变。
内部类通常都含有回调,引用那个匿名内部类的函数执行完了就没了,所以内部类中引用外面的局部变量需要是final的,这样在回调的时候才能找到那个变量,而如果是外围类的成员变量就不需要是final的,因为内部类本身都会含有一个外围了的引用(外围类.this)
阅读全文
0 0
- 内部类使用外部类局部变量必须是 final 原因
- 内部类引用外部类局部变量,外部类局部变量必须是final
- java 内部类 外部局部变量必须 final 原因
- 局部内部类引用外部类中的局部变量必须是final属性的!
- 局部内部类引用外部类中的局部变量必须是final属性的!
- 局部内部类引用外部类中的局部变量必须是final属性的!
- 局部内部类引用外部类中的局部变量必须是final属性的!
- Java内部类引用外部类中的局部变量为何必须是final问题解析
- Java内部类引用外部类中的局部变量为何必须是final问题解析
- 匿名内部类访问外部类中的局部变量必须是final属性
- 匿名内部类访问外部类中的局部变量必须是final属性
- Java内部类引用外部类中的局部变量为何必须是final问题解析
- 匿名内部类访问外部类中的局部变量必须是final属性
- Java内部类引用外部类中的局部变量为何必须是final?
- Java 内部类中使用局部变量必须是final
- 为什么内部类使用的局部变量必须是final而全局变量可以是no-final
- 黑马程序员--Java内部类引用外部类中的局部变量为何必须是final问题解析
- 【面试对宝典40题的解释】匿名内部类访问外部类中的局部变量必须是final属性
- Java基础-方法区以及static的内存分配图
- css之position定位个人理解
- 【谈英语的感受】
- 练习20
- SparkR安装部署及数据分析实例
- 内部类使用外部类局部变量必须是 final 原因
- 从值栈获取对象
- JavaSwing_4.5: JMenuBar(菜单栏)
- 先从我怎么搭建这个博客开始吧
- Ubuntu下编译hotspot踩坑指南
- 123123123
- Spring中的注解
- Delphi程序原来可以这样串口通信呀真是难得的找到方法了
- 搭建Twisted Reactor TCP 服务器与客户端(文末有福利)