我正在审核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
答案 0 :(得分:2)
我的理解是两者之间没有区别。这就像在foo()
类中调用this.foo()
或foo()
一样。this
在未明确写入时暗示。{/ p>