反编译后TestClass的匿名内部类为何显示为AnonymousTestApp$1而非TestClass$1?
匿名内部类命名为AnonymousTestApp$1而非TestClass$1的原因
Java编译器对匿名内部类的命名规则非常明确:匿名内部类的名称由它所在的外部类名称,加上$和递增的数字序号组成,和它继承的父类或实现的接口完全无关。
在你的代码里,匿名内部类直接定义在AnonymousTestApp类的main方法作用域内,所以编译器会给它分配AnonymousTestApp$1这个名称——数字1表示这是AnonymousTestApp类中定义的第一个匿名内部类。
TestClass只是这个匿名类继承的父类,它的名字不会影响匿名类的命名逻辑。如果在AnonymousTestApp里再定义第二个匿名内部类(不管继承什么类/接口),它的名称会是AnonymousTestApp$2,以此类推。
你可以检查编译后生成的class文件,会看到AnonymousTestApp$1.class这个文件,这就是对应匿名内部类的字节码文件,常量池中显示的名称和这个文件名完全一致。
内容的提问来源于stack exchange,提问作者ChpokHead
相关产品推荐
相关产品推荐

