为什么Javac创建一个其他类



我已经编译了以下代码(对于简短而省略了方法和变量):

// Outer.java
public class Outer
{
    private class Inner
    {
    }
    void someMethod()
    {
        Inner inObj = this.new Inner();
    }
    public static void main(String s[])
    {
        Outer outerObj = new Outer();
    }
}

当我列出创建的类时,它显示了以下内容:

Outer$1.class
Outer$Inner.class
Outer.class

外部外部$ inner 逻辑。外部$ 1 类的目的是什么?这些在时间尺度上创建这些的顺序是什么?

好奇。我不确定这是用来的。但是,如果您对课程进行了编译,则可以看到如何使用

public class Outer {
  public Outer();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return
  void someMethod();
    Code:
       0: new           #2                  // class Outer$Inner
       3: dup
       4: aload_0
       5: aconst_null
       6: invokespecial #3                  // Method Outer$Inner."<init>":(LOuter;LOuter$1;)V
       9: astore_1
      10: return
  public static void main(java.lang.String[]);
    Code:
       0: new           #4                  // class Outer
       3: dup
       4: invokespecial #5                  // Method "<init>":()V
       7: astore_1
       8: return
}
class Outer$Inner {
  final Outer this$0;
  Outer$Inner(Outer, Outer$1);
    Code:
       0: aload_0
       1: aload_1
       2: invokespecial #1                  // Method "<init>":(LOuter;)V
       5: return
}
class Outer$1 {
}

因此,Outer$1似乎什么都不包含 - 甚至没有默认的构造函数。但是,必须将对Outer$1的引用传递给Outer$Inner才能构造它。神秘地,someMethod中传递的值是nullsomeMethod中的第5行)。

相关内容

  • 没有找到相关文章

最新更新