天天看點

黑馬程式員_this 關鍵字

----------- android教育訓練、java教育訓練、java學習型技術部落格、期待與您交流! ------------

this 關鍵字

this 關鍵字代表自身,在程式中主要的使用用途有以下幾個方面:

使用 this 關鍵字引用成員變量

使用 this 關鍵字在自身構造方法内部引用其它構造方法

使用 this 關鍵字代表自身類的對象

使用 this 關鍵字引用成員方法

(1)引用成員變量

在一個類的方法或構造方法内部,可以使用“this.成員變量名”這樣的格式來引用

成員變量名,有些時候可以省略,有些時候不能省略。首先看一下下面的代碼:

public class ReferenceVariable {

private int a;

public ReferenceVariable(int a){

this.a = a;

}

public int getA(){

return a;

}

public void setA(int a){

this.a = a;

}

}

在該代碼的構造方法和 setA 方法内部,都是用 this.a 引用類的成員變量。因為無論在構造方法還是 setA 方法内部,都包含 2 個變量名為 a 的變量,一個是參數 a,另外一個是成員變量 a。按照 Java 語言的變量作用範圍規定,參數 a 的作用範圍為構造方法或方法内部,成員變量 a 的作用範圍是類的内部,這樣在構造方法和 setA 方法内部就存在了變量 a 的沖突,Java 語言規定當變量作用範圍重疊時,作用域小的變量覆寫作用域大的變量。是以在構造方法和 setA 方法内部,參數 a 起作用。這樣需要通路成員變量 a 則必須使用 this 進行引用。當然,如果變量名不發生重疊,則 this 可以省略。但是為了增強代碼的可讀性,一般将參數的名稱和成員變量的名稱保持一緻,是以this 的使用頻率在規範的代碼内部應該很多。

(2)引用構造方法

在一個類的構造方法内部,也可以使用 this 關鍵字引用其它的構造方法,這樣可以降低代碼的重複,也可以使所有的構造方法保持統一,這樣友善以後的代碼修改和維護,也

友善代碼的閱讀。

下面是一個簡單的示例:

public class ReferenceConstructor {

int a;

public ReferenceConstructor(){

this(0);

}

public ReferenceConstructor(int a){

this.a = a;

}

}

這裡在不帶參數的構造方法内部,使用 this 調用了另外一個構造方法,其中 0 是根

據需要傳遞的參數的值,當一個類内部的構造方法比較多時,可以隻書寫一個構造方法的内

部功能代碼,然後其它的構造方法都通過調用該構造方法實作,這樣既保證了所有的構造是

統一的,也降低了代碼的重複。

在實際使用時,需要注意的是,在構造方法内部使用 this 關鍵字調用其它的構造方法時,調用的代碼隻能出現在構造方法内部的第一行可執行代碼。這樣,在構造方法内部使

用 this 關鍵字調用構造方法最多會出現一次。

(3)代表自身對象

在一個類的内部,也可以使用 this 代表自身類的對象,或者換句話說,每個類内部都有一個隐含的成員變量,該成員變量的類型是該類的類型,該成員變量的名稱是 this,實

際使用 this 代表自身類的對象的示例代碼如下:

public class ReferenceObject

{

public ReferenceObject instance;

public ReferenceObject()

{

instance = this;

}

public void test()

{

System.out.println(this);

}

public static void main(String []argc)

{

ReferenceObject ro=new ReferenceObject();

ReferenceObject ro1=new ReferenceObject();

ro1.test();

System.out.println("ro1"+ro1);

System.out.println("ro"+ro);

}

}//引用ro和ro1 是為了測試this具體是什麼,是哪個的。

在構造方法内部,将對象 this 的值指派給 instance,在 test 方法内部,輸出對象 this 的内容,這裡的 this 都代表自身類型的對象ro1的位址。

(4)引用成員方法

在一個類的内部,成員方法之間的互相調用時也可以使用“this.方法名(參數)”來

進行引用,隻是所有這樣的引用中 this 都可以省略。

----------- android教育訓練、java教育訓練、java學習型技術部落格、期待與您交流! ------------