我是靠谱客的博主 飘逸小懒虫,这篇文章主要介绍方法中的匿名内部类只能访问final类型的局部变量,现在分享给大家,希望可以做个参考。

今天又看了一遍基础内容,看到了匿名内部类,发现了一段代码

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类型的局部变量的全部内容,更多相关方法中内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(137)

评论列表共有 0 条评论

立即
投稿
返回
顶部