爪哇 - 当“本”是唯一的出路?(Java - when “this” is the only wa

2019-08-18 07:22发布

下面的代码运行两个

我的理解:“这个”被用来标识 - “把这个值只是‘我’的对象”。 当两个工作,为什么人们通常用在二传手“这个”?

码:

public class PlayingWithObjects
{
    public static void main(String[] args)
    {
        SomeClass classObj = new SomeClass(10);

        System.out.println("classObj.getVar: " + classObj.getVar() );

        classObj.setVar(20);

        System.out.println("classObj.getVar: " + classObj.getVar() );

        classObj = new SomeClass(30);

        System.out.println("classObj.getVar: " + classObj.getVar() );
    }
}

class SomeClass
{
    private int var;

    public SomeClass(int putVar)
    {
        var = putVar;
    }

    public int getVar()
    {
        return var;
    }

    public void setVar(int putVar)
    {
//      var = putVar;           // also works
        this.var = putVar;
    }
}

我是否理解“这个”正确? 哪里是“本”使用和无法替代的。 请张贴一些代码。

Answer 1:

因为人们喜欢用这两个方法的参数和实例变量相同的变量名-在这种情况下,你需要this来区分。

public void setX(int x) {
    this.x = x;
}


Answer 2:

可以使用this ,如果你用同样的方法参数标识符字段,但是如果你根本就没有使用相同的名称也可避免。

没有使用相同的名称是一个比较普遍的做法,以避免混乱和阴影。 因此,任何参考this :如果是setter可以有更好的命名标准来代替inParameter ,例如。

public void setX(int inX) {
    x = inX;
}

其他使用this将是显式调用构造函数 。 这是不能用简单的命名约定来替换形式:

public class Foo {

    private String name;

    public Foo() {
        this("");
    }

    public Foo(String inName) {
        name = inName;
    }
}

也有可能是要回报你正在使用的实例的情况。 这也是东西, this可以让你做:

return this;


Answer 3:

有2个情况下,我知道的,除了案件KTM提到(我认为这是显而易见的,你已经知道):

  1. 只是使它很清楚,他们指的是当前对象的成员。

     void foo(int x) { this.y = x; // No mistaking that y belongs to the object } 
  2. 如果在其他对象中的匿名内部类是(例如:className类),你可以使用ClassName.this获得封闭对象的实例。 这样做的原因(没有双关语意)是,内类的内部,这将参照内部类。

     SomeInnerClass myObj = new SomeInnerClass() { void bar() { this.y = 0; // this refers to the SomeInnerClass object OuterClass.this.y = 0; // OuterClass.this refers to the enclosing class OuterClass object } }; 


Answer 4:

像KTM提到,制定者往往使用相同的名称作为参数的领域。 在这种情况下,参数阴影的字段名称,所以

public void setX(int x) {
    x = x;
}

将只设置参数本身而不是字段设置为参数。



Answer 5:

如果一个类具有一些名称(比如一个实例变量myVar ),以及方法具有完全相同的名称(一个局部变量myVar ),则向可变任何引用将引用的局部变量。 在这样的情况下,如果我们要指定类的实例变量,我们需要说this.myVar 。 如前所述,当我们希望有制定者在参数名称是一样的,它设置了实例变量,这是特别有用:

public void setMyVar(int myVar) {
    this.myVar = myVar; // If we said myVar = myVar;, we'd just set the local
                        // variable to itself, which would NOT be what we want.
}


文章来源: Java - when “this” is the only way to go?