匿名类相关知识

什么算是匿名内部类,怎么体现出匿名这两个字

首先为什么要出现这个匿名内部类,说白了就是想简化一些代码的编写,匿名就是连名字都没有,也就是不是经常创建的(只创建一次);另外匿名类必须继承一个类(实现了接口或者是个抽象类)或者实现一个接口

abstract class Person{ abstract void speak();}

class Man extends Person{ @Override void speak() { System.out.println("i am man,i can speak"); }}

class Woman extends Person{ @Override void speak() { System.out.println("i am woman,i can speak"); }}

Person xiaoming=new Man();

xiaoming.speak();

上面的是正常写法,Man和Women对speak的方法实现不相同

但是我的业务不经常用Man或者Women类,于是乎出现了下面的这种写法

Person xiaoming= new Person(){ @Override void speak() { System.out.println("i am man,i can speak"); } };xiaoming.speak();

具体你想怎样实现就怎么实现,不需要创建中间类(Women或者Man),这样就简化了代码的编写

当然我们也可以把抽象类换成Interface,在Android中我们应该用匿名类为某个控件添加点击事件如下

view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { }});

上面的OnClickListener是个接口

接下来还有Thread,这个我们应该也使用过

Thread thread=new Thread(){ @Override public void run() { }};

在run里面写自己的相应实现

之所以写匿名类是因为Android开发中内存泄漏中,其中一种场景是使用匿名内部类造成的内存泄漏

为什么会泄漏呢,有小伙伴说我经常用,怎么没有遇到内存泄漏,内存泄漏并不一定导致程序崩溃,如果你想知道有没有内存泄漏可以使用Profiler工具或者集成LeakCanary检测;生命周期不同是内存泄漏的真正原因

我们回归到匿名类上,我们使用匿名类的时候会持有外部类的引用的,当外部类被回收时,匿名内部类还在运行中,故外部类就不能进行回收,就会造成内存泄漏

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容