java 编译后产生class$1,class$2,class$innerclass文件的原因

class文件名中的$的含义如下:

      $后面的类是$前面的类的内部类

内部类有以下两种情况:

1.普通的组合类形式,即在一个类内部定义一个普通的类 

1

2

3

4

5

6

7

8

9

10

public class Outer {

    class Inner {

        public Inner {

              

}

}

     

}   

 

javac Outer.java后会出现两个class文件:

  Outer.class

  Outer$Inner.class

2.在一个类内部定义一个匿名类(一般是接口interface)

1

2

3

4

5

6

7

8

9

10

11

12

13

//定义一个接口

public Interface Test {

    public void test();

}

//进入正题

public class Outer {

    public Test test1 = new Test(){

        public void test() {Sysem.out.println("test1")}

}

}

此时会产生以下两个类:

Outer.class

Outer$1.class

其中$1代表的就是Outer类里面的new Test(){}这个匿名类

转载: http://www.cnblogs.com/stefanlee/p/3403445.html

猜你喜欢

转载自blog.csdn.net/u012278016/article/details/88405545