如何正确创建java内部类?

j0pj023g  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(325)

我有以下java类:

public class Outer {
 ...
 private class Inner {
  ...
 }
 ...
}

假设我在一个非静态的 Outer . 我打电话有什么区别吗 this.new Inner() 或者 new Outer.Inner() ? 在第二种情况下,是否保证没有新的 Outer 是否已创建?
我有一个恼人的错误,在我的程序,似乎只是有时,是很难找到或复制。所以我想知道这条线会不会出什么问题。

sxpgvts3

sxpgvts31#

他们是一样的,虽然他们都是不必要的长篇大论。
以下3个版本产生完全相同的字节码:

class Outer {
    private class Inner {
    }
    void foo() {
        Inner a = this.new Inner();
        Inner b = new Outer.Inner();
        Inner c = new Inner();       // Recommended way to write it
    }
}

字节码

0: new           #7                  // class Outer$Inner
       3: dup
       4: aload_0
       5: invokespecial #9                  // Method Outer$Inner."<init>":(LOuter;)V
       8: astore_1

       9: new           #7                  // class Outer$Inner
      12: dup
      13: aload_0
      14: invokespecial #9                  // Method Outer$Inner."<init>":(LOuter;)V
      17: astore_2

      18: new           #7                  // class Outer$Inner
      21: dup
      22: aload_0
      23: invokespecial #9                  // Method Outer$Inner."<init>":(LOuter;)V
      26: astore_3

添加空白行以提高清晰度。

相关问题