Cannot refer to a non-final variable response inside an inner class defined in a different method
来源:互联网 发布:魔兽1.12数据库 声望 编辑:程序博客网 时间:2024/05/17 06:58
内部类中调用外部类的局部变量。若是没有final的话就会出现报错:
匿名内部类不能访问外部类方法中的局部变量,除非该变量被声明为final类型
1. 这里所说的“匿名内部类”主要是指在其外部类的成员方法内定义的同时完成实例化的类,若其访问该成员方法中的局部变量,局部变量必须要被final修饰。原因是编译器实现上的困难:内部类对象的生命周期很有可能会超过局部变量的生命周期。
2. 局部变量的生命周期:当该方法被调用时,该方法中的局部变量在栈中被创建,当方法调用结束时,退栈,这些局部变量全部死亡。而内部类对象生命周期与其它类对象一样:自创建一个匿名内部类对象,系统为该对象分配内存,直到没有引用变量指向分配给该对象的内存,它才有可能会死亡(被JVM垃圾回收)。所以完全可能出现的一种情况是:成员方法已调用结束,局部变量已死亡,但匿名内部类的对象仍然活着。
3. 如果匿名内部类的对象访问了同一个方法中的局部变量,就要求只要匿名内部类对象还活着,那么栈中的那些它要所访问的局部变量就不能“死亡”。
4. 解决方法:匿名内部类对象可以访问同一个方法中被定义为final类型的局部变量。定义为final后,编译器会把匿名内部类对象要访问的所有final类型局部变量,都拷贝一份作为该对象的成员变量。这样,即使栈中局部变量已经死亡,匿名内部类对象照样可以拿到该局部变量的值,因为它自己拷贝了一份,且与原局部变量的值始终保持一致(final类型不可变)。
阅读全文
0 0
- Cannot refer to a non-final variable inside an inner class defined in a different method
- Cannot refer to a non-final variable response inside an inner class defined in a different method
- Cannot refer to a non-final variable anim inside an inner class defined in a different method
- Cannot refer to a non-final variable music inside an inner class defined in a different method
- Cannot refer to a non-final variable mylis inside an inner class defined in a different method
- "Cannot refer to a non-final variable * inside an inner class defined in a different method"错误解析
- Cannot refer to a non-final variable mylis inside an inner class defined in a different method
- Cannot refer to a non-final variable * inside an inner class defined in a different method"错误解析
- Cannot refer to a non-final variable * inside an inner class defined in a different method"错误解析
- Cannot refer to a non-final variable * inside an inner class defined in a different method错误问题
- java:Cannot refer to a non-final variable tx inside an inner class defined in a different method
- Cannot refer to a non-final variable mylis inside an inner class defined in a different method
- Cannot refer to a non-final variable mylis inside an inner class defined in a different method
- Cannot refer to a non-final variable file inside an inner class defined in a different method
- Cannot refer to a non-final variable mylis inside an inner class defined in a different method
- Cannot refer to a non-final variable * inside an inner class defined in a different method"错误解析
- Cannot refer to a non-final variable hql inside an inner class defined in a different method
- Cannot refer to a non-final variable i2 inside an inner class defined in a different method 的真正原因
- 大端模式、小端模式及其在Qt中的转换
- makefile作用
- ST表模板(维护区间最大值)
- HDU 3507 Print Article
- python str方法 等于执行encode utf-8 无论是在ipython还是原生Python
- Cannot refer to a non-final variable response inside an inner class defined in a different method
- System V共享内存
- Kubernetes入门指南:部署一个Node.js Docker应用 — SitePoint
- [声明]Hallmeow's cnblog
- MySQL索引优化
- 剑指offer--二叉树的下一个结点
- 总结
- 深拷贝和浅拷贝问题
- Spring Cloud入门教程(三):声明式服务调用(Feign)