局部内部类为什么只能访问final修饰的局部变量
来源:互联网 发布:jquery.rotate.min.js 编辑:程序博客网 时间:2024/06/05 09:57
如果将一个访问了final的局部变量的内部类进行反编译,可以发现该变量是被作为构造函数的参数传入进去的,当然与之一起传入的参数还有外部类引用this。
实际经过编译,生成的字节码如下:
荒唐原因:Java竟然允许内部类对象访问局部变量!
要知道局部变量的生命周期与局部内部类的对象的生命周期的不一致。局部变量当所处的函数执行结束后就已经死亡了,不存在了,但是局部内部类对象还可能一直存在(只要有人还引用该对象),这是就会出现了一个悲剧的结果,局部内部类对象访问一个已不存在的局部变量。
Java为了避免上述情况,才发明了上述机制,偷偷地将局部变量的引用放在内部类对象的成员变量中。
但是解决了生命周期的问题之后,又引出了另一个问题,因为局部变量和内部类中使用的变量是同一个对象呢?
比如下面的例子,而且如果不强制使用final,我们根本就不知道执行时,obj到底是哪个对象:
0 0
- 局部内部类为什么只能访问final修饰的局部变量
- 为什么方法中的内部类只能访问final修饰的局部变量
- 局部内部类为什么只能访问final局部变量?
- 局部内部类为什么只能访问final局部变量?
- 为什么局部内部类和匿名内部类只能访问final的局部变量?
- 局部内部类只能访问方法内被final修饰的局部变量
- “局部内部类只能访问被final修饰的局部变量”的解释
- 局部内部类只能访问被final修饰的局部变量
- 局部内部类只能访问局部中被final修饰的变量
- 为什么内部类访问局部变量需要加final修饰?
- 为什么局部内部类只能访问方法中final类型的局部变量?
- JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?
- JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?
- 于java里方法的内部类只能访问被final修饰的局部变量和.
- 局部内部类为什么只能访问final局部变量,对于成员变量却可以随便访问?
- java中内部类访问局部变量的时候,为什么变量必须加上final修饰
- 内部类访问局部变量的时候,为什么变量必须加上final修饰
- 内部类访问局部变量的时候,为什么变量必须加上final修饰(转)
- Aidl实现跨进程通信小例子
- Poj 3662 Telephone Lines【二分+SPFA】
- Swift基础(二十九)UIToolBar
- 2016多校联合第三场 HDU5758 Explorer Bo
- Code Page Identifiers
- 局部内部类为什么只能访问final修饰的局部变量
- 努力奋斗
- 类型转换功能类Conveter
- iOS 属性传值失败原因
- 用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什么?如果改用strong关键字,可能造成什么问题?
- SG函数 多校Chess
- 监听电池电量之粘性广播
- 关于FREEMARKER的一些总结
- 日期功能类DateFunction