用“this.new InnerClass()”和“new InnerClass()”实例化之间的区别

时间:2016-05-31 18:29:06

标签: java inner-classes

我正在审核java 8认证的一些材料,并且遇到了类似于下面所示的代码。有人可以解释使用'this'关键字实例化内部类而不使用'this'关键字之间的区别是什么?实例化InnerClass的两种方式似乎都有效(没有编译器错误或运行时错误)。

这类似于使用类名来访问公共静态成员而不是实例名吗?两种方式都有效,但是使用类名称需要使用实例名称。

public class OuterClass {

    class InnerClass { }                                // Define Inner class

    private InnerClass innerclass;                      // private member
    private InnerClass thisInnerClass;                  // private member

    public OuterClass() {
        this.innerclass = new InnerClass();             // without 'this' keyword
        this.thisInnerClass = this.new InnerClass();    // with 'this' keyword
    }
}

=====================================

编辑: 这两者没有区别。 我编译了以下两个版本,两个版本的md5总和相同。使用'this'引用而不使用'this'引用会产生相同的字节码。

    public class OuterClass {

            class InnerClass { }                            // Define Inner class

            private InnerClass innerClass;                  // private member

            public OuterClass() {
                    this.innerClass = new InnerClass();     // without 'this' keyword
            }
    }

上面编译的代码的MD5总和(没有'this'引用):
MD5(OuterClass $ InnerClass.class)= 7f1679f1c7a0201164ce5eb03fe29699
MD5(OuterClass.class)= bf7419b01f8f7c24d2892d10c4fd6e05

    public class OuterClass {

            class InnerClass { }                            // Define Inner class

            private InnerClass innerClass;                  // private member

            public OuterClass() {
                    this.innerClass = this.new InnerClass();// with 'this' keyword
            }
    }

上述代码编译的MD5总和('this'参考):
MD5(OuterClass $ InnerClass.class)= 7f1679f1c7a0201164ce5eb03fe29699
MD5(OuterClass.class)= bf7419b01f8f7c24d2892d10c4fd6e05

1 个答案:

答案 0 :(得分:2)

我的理解是两者之间没有区别。这就像在foo()类中调用this.foo()foo()一样。this在未明确写入时暗示。{/ p>