您的位置:首页 > 编程语言 > Java开发

java类方法中使用内部类的参数问题

2014-10-23 10:22 281 查看

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(){
//Here a、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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 内部类 final
相关文章推荐