我编译了这段代码然后,TestInner$1.class
出现了。
我知道~~~$1.class
表示该文件包含“匿名类。”
但是我不明白这个类文件的原因。我想知道原因。
这是代码。
public class TestInner {
private static class Inner { }
public static void main(String[] args){
new Inner();
}
}
我尝试将其他版本移除“私有”标识符,如下所示。
public class TestInner {
static class Inner { }
public static void main(String[] args){
new Inner();
}
}
我想过这段代码也会生成TestInner$1.class
个文件。
但是它没有创建文件。
此外,添加 Constructor 的以下代码也未生成TestInner$1.class
。
public class TestInner {
private static class Inner {
Inner(){ }
}
public static void main(String[] args){
new Inner();
}
}
我不知道,有人可以帮助我吗?
修改:
我找到了同样的问题并且解决了。谢谢你的帮助。
Why is an anonymous inner class containing nothing generated from this code?
答案 0 :(得分:4)
您的所有示例都没有匿名内部类。它们都不会生成名为TestInner$1.class
的文件。所有这些都将生成一个名为TestInner$Inner.class
的文件。
以下示例显示了一个匿名内部类,而将生成TestInner$1.class
:
public class TestInner {
public static void main(String[] args){
new Object() {
@Override public String toString () {
return "ninja";
}
};
}
}
我不确定你的TestInner$1.class
来自哪里,但我猜这是你以前的实验遗留下来的。
更新1:我可以确认没有使用Eclipse我得到TestInner$1.class
(除了TestInner$Inner.class
- 产生了3个文件)第一个例子但不是最后两个,就像你看到的一样。当我发现原因时会更新。通过Eclipse编译时,永远不会生成TestInner$1.class
。
更新2:OP在Why is an anonymous inner class containing nothing generated from this code?中找到了解决方案。