【问题标题】:When compiling codes with inner class, why the strange output file is created?使用内部类编译代码时,为什么会创建奇怪的输出文件?
【发布时间】:2014-03-03 03:52:55
【问题描述】:

我编译了这段代码,然后,TestInner$1.class 出现了。

我知道~~~$1.class 表示该文件具有“匿名类。

但是我不明白为什么要制作这个类文件。我想知道原因。

这里是代码。

public class TestInner {
    private static class Inner { }

    public static void main(String[] args){
         new Inner();
    }
}

我尝试了另一个版本删除了“private”标识符,如下所示。

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?

【问题讨论】:

  • 您的示例中没有任何匿名类。
  • 您的所有样本都应该创建一个TestInner$Inner.class。什么都不应该生成TestInner$1.class。可能是之前的实验遗留下来的。
  • 你可能想通过Anonymous Classes tutorial工作。
  • 我用谷歌搜索,然后得到信息“如果您使用 Eclipse,则不会创建此类文件。”
  • @Jason C 谢谢!我也再研究一下。

标签: java inner-classes


【解决方案1】:

您的示例都没有匿名内部类。它们都不会生成一个名为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? 中找到了解决方案。

【讨论】:

  • 文件不可能完全遗留下来。因为我删除了文件 TestInner*.class,并验证了这些文件是否真的被删除了。然后我一次又一次地尝试编译。
猜你喜欢
  • 2014-03-24
  • 1970-01-01
  • 2016-04-13
  • 2016-08-24
  • 1970-01-01
  • 2023-04-01
  • 2011-11-06
  • 1970-01-01
相关资源
最近更新 更多