2017-12-02 85 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; 
} 

因此它主要用來識別與您要指定正在傳入的參數的對象。因爲變量名是相同的參數, 「這」表示它是「這個對象」接收這些屬性。

相關問題