关于Java内部类的一个疑问

今天有同学拿一段代码给我看,问我这段代码会编译生成几个类文件:

 1 public class OuterClass {

 2 

 3     public static void main(String[] args) {

 4 

 5         new InnerClass().said();

 6 

 7     }

 8 

 9  

10 

11     private static class InnerClass {

12 

13         public void said() {

14 

15             System.out.println("Hello");

16 

17         }

18 

19     }

20 

21 }

 

不就是两个吗~~~

一个是OuterClass.class和一个OuterClass$InnerClass.class。可是我在命令行中编译,结果让我大跌眼镜:

 

怎么多出一个呢?OuterClass$1.class这个从名字上看像是匿名内部类生成的。可是我这里没有匿名内部类啊~~~神马情况。我试着把InnerClass改成public的。代码变成:

 1 public class OuterClass {

 2 

 3     public static void main(String[] args) {

 4 

 5         new InnerClass().said();

 6 

 7     }

 8 

 9  

10 

11     public static class InnerClass {

12 

13         public void said() {

14 

15             System.out.println("Hello");

16 

17         }

18 

19     }

20 

21 }

 

这一次用命令行就是生成两个类文件了。

我又试着在Eclipse编写同样的代码,结果让我更加不解~~~在Eclipse中无论是用public还是用private修饰InnerClass都只会生成OutClass.class和OutClass$InnerClass.class两个类文件

而且我把OuterClass$1.class文件删掉也是可以正常运行的。证明这个类文件是没有用处的。

那为什么编译器会产生这个?还是说这个文件是中间文件只是javac命令不会自动把它删除?

希望高手解除小弟的疑惑。

你可能感兴趣的:(java内部类)