java类方法中使用内部类的参数问题
来源:互联网 发布:淘宝hd 2.6.1版本 编辑:程序博客网 时间:2024/05/16 19:18
1.问题:
public class Test{private int a = 1;static int b = 2;public void method(){final int c = 3;int d = 4;class Cinner {public void mymethod(){//Herea、b、c、d哪些参数可以调用}}}}
一般理解:Cinner类可以调用adcd四个参数,当是受到java技术的限制
答案为:abc
内部类参数必须为final类型
2.原因:
局部变量的生命周期与局部内部类的对象的生命周期的不一致性!
设方法method()被调用后,在栈中生成了变量d,此时产生了一个局部内部类Cinner,它访问了局部变量d,当方法methos()结束时,局部变量d就会死亡,但局部内部类对象Cinner还可能一直的存在(当没有人再引用该对象时,它才会死亡),它不会随着方法method()运行结束死亡,这时就出现了一个错误结果,局部内部类对象Cinner要访问一个已经不存在的局部变量d
3.java中解决方法:
当变量是final时,通过final局部变量“复制”一份,复制品直接作为局部内部中的数据成员,当局部内部类访问局部变量时,其实真正访问的是这个局部变量的“复制品”,因此就算当运行栈中的真正的局部变量死亡时,局部内部类对象仍可以访问局部变量(真正访问为“复制品”),给人感觉好像局部变量的生命期延长了。
4.总结:
这个规定是一种无可奈何,同时也说明程序语言的设计时受到实现技术的限制的,这就是一个例子,大家更多关心的是如何设计和思考,对于技术上的实现觉得无关紧要,只要设计好,都能实现。
参见:http://feiyeguohai.iteye.com/blog/1500108
0 0
- java类方法中使用内部类的参数问题
- Java中匿名内部类的工厂方法使用
- java内部类,内部类的共性,成员内部类,方法内部类匿名内部类,静态嵌套类,不解
- Java外部类的构造方法中声明内部类的问题
- JAVA内部类的作用、方法、使用
- JAVA内部类的作用、方法、使用
- JAVA内部类的作用、方法、使用
- java中内部类的问题
- java中内部类的问题
- java中匿名内部类的问题
- 在Java内部类中使用外部类的成员方法以及成员变量
- 在Java内部类中使用外部类的成员方法以及成员变量
- 在Java内部类中使用外部类的成员方法以及成员变量
- Java中内部类的使用
- java中内部类的使用
- java中匿名内部类的使用
- java中内部类的使用
- JAVA中使用内部类的原因
- 保留小数点后两位
- textView设置多颜色
- [数据结构与算法]两级页表(Two-Level Page Table)
- 论责任成本管理体系的构建
- Myeclipse+eclipse插件形式安装svn插件,和在线安装方式图解
- java类方法中使用内部类的参数问题
- .Net+SQL Server企业应用性能优化笔记—精确查找瓶颈
- Spring依赖注入方式
- 各种基金调用介绍
- 3节点rac基础上配置goldengate(单实例)
- [LeetCode] Subsets II
- 夏夜
- 根据字符串类名动态创建对象
- 每日一博