2017-12-02 179 views
1

我正在寻找关于this关键字的一些指导。我刚刚了解了这个概念,这让我感到困惑。这是我的一段代码:我是否在我的代码中正确使用'this'关键字?

public class CashRegister { 
    private ArrayList<Double> items; 
    private int itemCount; 
    private double totalPrice; 

     public double getTotal() { 
      this.totalPrice = 0; 
      for (int i = 0; i < this.items.size(); i++) { 
       this.totalPrice = this.totalPrice + this.items.get(i); 
      } 
      return totalPrice; 
     } 
    } 

我的问题是,如果我使用'this'是吗?每次使用像totalPriceitems ArrayList这样的变量时,是否应该使用“this”?

+1

我不会。这是多余的,任何懂得语言的人都知道'totalPrice'指的是实例字段。 – markspace

+0

在这种情况下,它们不是必需的。当有可能发生冲突时使用关键字。这里,getTotal()中引用的唯一对象是用于调用它的对象。因此,在引用中没有与我使用哪个对象的属性相冲突。 –

+0

我喜欢它。对我而言,这是防止冲突的一种方法。另一种方法是根本不创建名称冲突。例如给你的成员一个像mTotalPrice这样的前缀(就像其他语言的'_totalPrice'一样)。如果您使用IDE,则可以设置一些高级规则,以便在您忘记使用'this'或创建了这样的名称冲突(至少Eclipse有这个)时警告您。 – Zabuza

回答

2

这没有错。但它会污染代码,因为它是多余的。我们都知道itemstotalPrice是当前对象的字段(由此引用)。

这里是一段代码,其中this有意义:

public class Test { 
    private String test; 

    public Test(String test) { 
     this.test = test; 
    } 
} 

您可能会看到,提及test是不明确的。在构造函数内部,如果您只使用test,则不会知道是否访问传递给构造函数的Test类型对象字段或参考String,在这种情况下,您将访问该引用。因此this用于确保您使用的类型为Test的对象的字段。

有一个概念叫shadowing。使用this有助于不陷入这种陷阱,认为当你不是时,你正在引用某些东西。

这个问题是有帮助的: What is variable shadowing used for in a Java class?

+0

谢谢,你的代码是一个对象的例子吗? – WizKid22

+0

@ WizKid22实际上,它是类Test的定义。如果你像Test t1 = new Test(“abc”)那样实例化它。然后t1将是Test类型的对象。将一个班级视为一个蓝图,并将该对象看作是实际的建筑物。 – wleao

1

您使用this的方式绝对没有错,但是是多余的。您可以在不使用this的情况下编写相同的代码,并获得相同的结果。

+0

你太快了!大声笑 – wleao

1

通常,“this”最常用的用法是在对象构造函数中。所以,你可以有一些东西一样......

public NewThing(int count, double price) { 
    this.count = count; 
    this.price = price; 
} 

因此它主要用来识别与您要指定正在传入的参数的对象。因为变量名是相同的参数, “这”表示它是“这个对象”接收这些属性。

相关问题