java | 匿名内部类简单刨析
Published on
Last updated onjava | 匿名内部类简单刨析
什么是匿名内部类
匿名类是指没有类名的内部类。
演示
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
public class AnonymousClassExample {
public static void main(String[] args) {
new Thread(new Runnable() { @Override public void run() { System.out.println("Hello World"); } }).start(); } }
|
上面的代码在编译后会生成一个 AnonymousClassExample
类和 AnonymousClassExample1.class

AnonymousClassExample$1.class
的内容如果我们反汇编 class 文件后,是下面的内容

总结
匿名内部类是 java
提供的一种语法糖
。
1
| 本质上是 java 的编译器在编译 java 文件到 class 文件的过程中,为匿名内部类生成一个类,并将其作为一个独立的类文件进行编译。
|
1
| 这种语法糖类似于 构造方法的语法糖:没有定义构造方法会自动生成一个无参的构造法方法。
|
1
| 如果你直接定义一个 AnonymousClassExample$1 的类(实现 Runnable),效果是一样的。
|
扩展
java
编译器为 匿名内部类
分配名称的规则: 外部类名 + 序号。
如果我们使用了两次匿名内部类,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| public class AnonymousClassExample {
public static void main(String[] args) {
new Thread(new Runnable() { @Override public void run() { System.out.println("Hello World"); } }).start();
new Thread(new Runnable() { @Override public void run() { System.out.println("Hello World"); } }).start(); } }
|
编译后输出如下

参考