我知道这是指一个当前对象。但是我不知道什么时候我真的需要使用它。例如,如果我用x代替这个,会有什么不同吗。X在某些方法中?可能x将是指一个变量,这是局部的考虑方法?我指的是只有在这个方法中才能看到的变量。
那么this.method()呢?我能用吗?我应该用它吗?如果我只是使用方法(),它不是,默认情况下,应用到当前对象?
我知道这是指一个当前对象。但是我不知道什么时候我真的需要使用它。例如,如果我用x代替这个,会有什么不同吗。X在某些方法中?可能x将是指一个变量,这是局部的考虑方法?我指的是只有在这个方法中才能看到的变量。
那么this.method()呢?我能用吗?我应该用它吗?如果我只是使用方法(),它不是,默认情况下,应用到当前对象?
当前回答
当有两个变量一个实例变量和另一个同名的局部变量时,我们使用这个。引用当前执行对象,以避免名称之间的冲突。
其他回答
唯一需要用的就是这个。当当前作用域内的另一个变量具有相同的名称并且您希望引用实例成员时(如William所描述的那样),则使用qualifier。除此之外,x和这个。x在行为上没有区别。
除非你有重叠的变量名,这只是为了在你阅读代码时清晰。
this关键字主要用于三种情况。第一种也是最常见的方法是在setter方法中消除变量引用的歧义。第二种情况是需要将当前类实例作为参数传递给另一个对象的方法。第三种方法是从构造函数内部调用备用构造函数。
案例1:使用this来消除变量引用的歧义。在Java setter方法中,我们通常传递一个与我们试图设置的私有成员变量同名的参数。然后我们将参数x赋值给this。x。这清楚地表明,您正在将参数“name”的值分配给实例变量“name”。
public class Foo
{
private String name;
public void setName(String name) {
this.name = name;
}
}
情况2:使用this作为传递给另一个对象的参数。
public class Foo
{
public String useBarMethod() {
Bar theBar = new Bar();
return theBar.barMethod(this);
}
public String getName() {
return "Foo";
}
}
public class Bar
{
public void barMethod(Foo obj) {
obj.getName();
}
}
案例3:使用this调用备用构造函数。在评论中,trinithis正确地指出了this的另一种常用用法。当一个类有多个构造函数时,可以使用this(arg0, arg1,…)来调用您选择的另一个构造函数,前提是在构造函数的第一行中这样做。
class Foo
{
public Foo() {
this("Some default value for bar");
//optional other lines
}
public Foo(String bar) {
// Do something with bar
}
}
我还见过这种情况,用来强调实例变量被引用(不需要消除歧义),但在我看来,这种情况很少见。
如果我用“x”而不是“this”会有什么不同吗?X "在某些方法中?
通常不会。但有时也会有所不同:
class A {
private int i;
public A(int i) {
this.i = i; // this.i can be used to disambiguate the i being referred to
}
}
如果我只是使用“method()”,它会不会被默认应用到当前对象?
是的。但是如果需要的话,this.method()会澄清调用是由这个对象进行的。
this的第二个重要用途(除了用局部变量隐藏之外,很多人已经说过了)是在从嵌套的非静态类访问外部实例时:
public class Outer {
protected int a;
public class Inner {
protected int a;
public int foo(){
return Outer.this.a;
}
public Outer getOuter(){
return Outer.this;
}
}
}