Java中的Class.this和this有什么不同?

有两种方法可以引用该类中的类的实例。 例如:

class Person { String name; public void setName(String name) { this.name = name; } public void setName2(String name) { Person.this.name = name; } } 

一个使用this.name来引用对象字段,而另一个使用className.this来引用对象字段。 这两个引用有什么区别?

在这种情况下,他们是一样的。 当你有一个需要引用其外部类的实例的非静态嵌套类时, Class.this语法是非常有用的。

 class Person{ String name; public void setName(String name){ this.name = name; } class Displayer { String getPersonName() { return Person.this.name; } } } 

这个语法只有在嵌套类时才会变得相关:

 class Outer{ String data = "Out!"; public class Inner{ String data = "In!"; public String getOuterData(){ return Outer.this.data; // will return "Out!" } } } 

你只需要为内部类使用className.this。 如果你不使用它们,不要担心。

Class.this对于引用一个不是静态的Class.this是有用的。

要实例化一个非静态的InnerClass ,你必须首先实例化InnerClass 。 因此,一个非静态的InnerClass将始终有一个InnerClass的引用,并且所有的InnerClass的字段和方法都可以被InnerClass

 public static void main(String[] args) { OuterClass outer_instance = new OuterClass(); OuterClass.InnerClass inner_instance1 = outer_instance.new InnerClass(); OuterClass.InnerClass inner_instance2 = outer_instance.new InnerClass(); ... } 

在这个例子中,两个Innerclass都是从相同的Innerclass类实例化的,因此它们都具有相同的Outerclass引用。