匿名内部类也就是没有名字的内部类。
通常在我们有名字的类的对象的情况,这时在栈空间是有一个变量名去指向你的堆空间的属性和一些方法,这时候就可以很正常的去调用你的属性和方法,这时候java虚拟机就可以识别,也不会将你的堆空间的内容给回收。
但是如果是匿名的内部类,这时候就没有变量名去引用堆空间的内容。那么这个时候只能引用一次,引用完以后java虚拟机会将其当做是垃圾自动回收。
而且使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口。
我们可以看看两个简单的例子:
一、Thread类的匿名内部类实现:
public class User { public static void main(String[] args) { Thread t = new Thread() { public void run() { for (int i = 0; i < 5; i++) { System.out.print(i + " "); } } }; t.start(); } }
运行的结果:0,1,2,3,4
二、Runnable接口的匿名内部类实现:
扫描二维码关注公众号,回复:
854146 查看本文章
public class User { public static void main(String[] args) { Runnable r = new Runnable() { public void run() { for (int i = 0; i < 5; i++) { System.out.print(i + " "); } } }; r.start(); } }
运行的结果:0,1,2,3,4