zoukankan      html  css  js  c++  java
  • 关于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命令不会自动把它删除?

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

  • 相关阅读:
    Flask初识之安装及HelloWord程序
    Python 四大主流 Web 编程框架
    Mysql之锁、事务绝版详解---干货!
    Django基础九之中间件
    Django基础八之cookie和session
    Django基础七之Ajax
    Django基础六之ORM中的锁和事务
    Linux下使用tail查找日志文件关键词有颜色、高亮显示
    主流云测平台汇总
    RPC框架总述
  • 原文地址:https://www.cnblogs.com/yjiyjige/p/2838643.html
Copyright © 2011-2022 走看看