2015-05-27 21 views
6

據我所知,這是在下列情況下使用:當我們想指的是具有相同名稱的局部變量實例變量在java中何處使用「this」?

  1. this關鍵字使用。
  2. 在同一個類中調用一個構造函數給其他構造函數。
  3. 將類實例作爲參數傳遞給方法。
  4. 訪問外部類變量。

但我已經通過我的項目的代碼去哪裏,他們利用這種在干將一樣:據我所知

class a { 
    int time; 

    int getValue() { 
     return this.time * 5.; 
    } 
} 

,每個對象都有自己的實例變量和方法的副本,所以會這種方式返回是有道理的。 請說明。

Stackoverfow問題稱:When should I use "this" in a class?

+3

'this'指向當前對象實例,所以'this.time'引用「它自己的實例變量副本」。雖然是可選的。許多程序員在引用實例變量時不使用'this'。儘管代碼@SrinathGanesh顯示是一個不錯的約定。 – DavidS

回答

6

當你有類似以下的方法:

public void setFoo(Foo foo) { 
    this.foo = foo; 
} 

使用this是強制性的。否則,它會將參數foo分配給自己,而不是將其分配給實例變量。

但這並不意味着這是唯一的情況,你可能使用this。下面的代碼是完全等同:

public void setFoo(Foo newFoo) { 
    this.foo = newFoo; 
} 

雖然在這種情況下,你很可能會寫

public void setFoo(Foo newFoo) { 
    foo = newFoo; 
} 

因爲this不是必要了。那不會讓它非法

所以,

int getValue() { 
    return time * 5; 
} 

int getValue() { 
    return this.time * 5; 
} 

是完全等同。

9

很多人(我是其中之一)使用this關鍵字,即使它不明確需要。

  • 有些人覺得它更清楚地擺在this任何東西屬於同一類,同樣的邏輯適用於super前面。
  • 有些人總是使用this通過反射更好地自動完成(彈出自動出現,懶惰的程序員)在一些IDE。

這些點是主要是基於意見並沒有什麼關係。

對於其他用途,如你mentionned,它可用於參數傳遞到另一個構造函數,把類實例或不同的,當你有兩個名稱相同的變量。

然而,國際海事組織,它是這樣simplier只是沒有與多個同名變量。

1

「這個」被用於指代在當前參考對象關鍵字被使用。這只是用作語法糖,以使其更容易執行某些任務,例如調用同一類中的構造函數,訪問同一類中的字段,參數類型。

以下是兩種不同編程風格的示例。兩者都做同樣的事情,但第一個例子使用'this'來顯式調用構造函數。

public class Foo { 
    public Foo() { this("Hello"); } //Explicit constructor call 
    public Foo(String string) { System.out.print(string); } 
    } 

    public class Bar { 
    public Bar() { new Bar("Hello"); } 
    public Bar(String string) { System.out.print(string); } 
    } 
1

關鍵字'this'通常用於從匿名類中引用包含類中的字段。例如:

public class App 
{ 
    public String myString = "This is Java"; 
    public App() 
    { 
     JButton button = new JButton("Test"); 
     button.addActionListener(new ActionListener(){ 

     @Override 
     public void actionPerformed(ActionEvent arg0) 
     { 
      System.out.println(App.this.myString); // <-- App.this gives access to public fields in App 
     }}); 
    } 
}