概述
今天又看了一遍基础内容,看到了匿名内部类,发现了一段代码
class OuterClass{
public OutInterface doit(final String x){
class InnerClass implements OutInterface{
InnerClass(String s){
s = x;
System.out.println(s);
}
}
}
}
为什么doit传入参数是x呢。仔细想了一下,是这样的。InnerClass即内部类,它的生命周期和普通类一样,即创建的时候跟它分配一块内存,直到没有引用指向它的时候,它才会被GC回收。 那么再想想,如果 x是一个普通的局部变量,那么它在成员方法doit调用结束的时候,就死亡了。而内部类仍然还在使用它,这就产生了矛盾。 解决办法就是用final修饰,用final修饰后,编译器会把内部类需要访问的final局部变量做一份拷贝,做为该内部类对象的成员变量,这样就可以访问啦。
最后
以上就是飘逸小懒虫为你收集整理的方法中的匿名内部类只能访问final类型的局部变量的全部内容,希望文章能够帮你解决方法中的匿名内部类只能访问final类型的局部变量所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复