首頁技術(shù)文章正文

JAVA中this的三種用法的詳解

更新時(shí)間:2018-09-06 來源:黑馬程序員技術(shù)社區(qū) 瀏覽量:

this關(guān)鍵字必須放在非靜態(tài)方法里面

this關(guān)鍵字代表自身,在程序中主要的使用用途有以下幾個(gè)方面:

? 使用this關(guān)鍵字引用成員變量

? 使用this關(guān)鍵字在自身構(gòu)造方法內(nèi)部引用其它構(gòu)造方法

? 使用this關(guān)鍵字代表自身類的對象

? 使用this關(guān)鍵字引用成員方法

8.8.1.1 引用成員變量

在一個(gè)類的方法或構(gòu)造方法內(nèi)部,可以使用“this.成員變量名”這樣的格式來引用成員變量名,有些時(shí)候可以省略,有些時(shí)候不能省略。首先看一下下面的代碼:

/**

* 使用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;

}

}

在該代碼的構(gòu)造方法和setA方法內(nèi)部,都是用this.a引用類的成員變量。因?yàn)闊o論在構(gòu)造方法還是setA方法內(nèi)部,都包含2個(gè)變量名為a的變量,一個(gè)是參數(shù)a,另外一個(gè)是成員變量a。按照J(rèn)ava語言的變量作用范圍規(guī)定,參數(shù)a的作用范圍為構(gòu)造方法或方法內(nèi)部,成員變量a的作用范圍是類的內(nèi)部,這樣在構(gòu)造方法和setA方法內(nèi)部就存在了變量a的沖突,Java語言規(guī)定當(dāng)變量作用范圍重疊時(shí),作用域小的變量覆蓋作用域大的變量。所以在構(gòu)造方法和setA方法內(nèi)部,參數(shù)a起作用。

這樣需要訪問成員變量a則必須使用this進(jìn)行引用。當(dāng)然,如果變量名不發(fā)生重疊,則this可以省略。

但是為了增強(qiáng)代碼的可讀性,一般將參數(shù)的名稱和成員變量的名稱保持一致,所以this的使用頻率在規(guī)范的代碼內(nèi)部應(yīng)該很多。

8.8.1.2 引用構(gòu)造方法

在一個(gè)類的構(gòu)造方法內(nèi)部,也可以使用this關(guān)鍵字引用其它的構(gòu)造方法,這樣可以降低代碼的重復(fù),也可以使所有的構(gòu)造方法保持統(tǒng)一,這樣方便以后的代碼修改和維護(hù),也方便代碼的閱讀。

下面是一個(gè)簡單的示例:

/**

* 使用this關(guān)鍵字引用構(gòu)造方法

*/

public class ReferenceConstructor {

int a;


public ReferenceConstructor(){

this(0);

}


public ReferenceConstructor(int a){

this.a = a;

}

}

這里在不帶參數(shù)的構(gòu)造方法內(nèi)部,使用this調(diào)用了另外一個(gè)構(gòu)造方法,其中0是根據(jù)需要傳遞的參數(shù)的值,當(dāng)一個(gè)類內(nèi)部的構(gòu)造方法比較多時(shí),可以只書寫一個(gè)構(gòu)造方法的內(nèi)部功能代碼,然后其它的構(gòu)造方法都通過調(diào)用該構(gòu)造方法實(shí)現(xiàn),這樣既保證了所有的構(gòu)造是統(tǒng)一的,也降低了代碼的重復(fù)。

在實(shí)際使用時(shí),需要注意的是,在構(gòu)造方法內(nèi)部使用this關(guān)鍵字調(diào)用其它的構(gòu)造方法時(shí),調(diào)用的代碼只能出現(xiàn)在構(gòu)造方法內(nèi)部的第一行可執(zhí)行代碼。這樣,在構(gòu)造方法內(nèi)部使用this關(guān)鍵字調(diào)用構(gòu)造方法最多會(huì)出現(xiàn)一次。

8.8.1.3 代表自身對象

在一個(gè)類的內(nèi)部,也可以使用this代表自身類的對象,或者換句話說,每個(gè)類內(nèi)部都有一個(gè)隱含的成員變量,該成員變量的類型是該類的類型,該成員變量的名稱是this,實(shí)際使用this代表自身類的對象的示例代碼如下:

/**

* 使用this代表自身類的對象

*/

public class ReferenceObject {

ReferenceObject instance;


public ReferenceObject(){

instance = this;

}


public void test(){

System.out.println(this);

}

}

在構(gòu)造方法內(nèi)部,將對象this的值賦值給instance,在test方法內(nèi)部,輸出對象this的內(nèi)容,這里的this都代表自身類型的對象。

8.8.1.4 引用成員方法

在一個(gè)類的內(nèi)部,成員方法之間的互相調(diào)用時(shí)也可以使用“this.方法名(參數(shù))”來進(jìn)行引用,只是所有這樣的引用中this都可以省略,所以這里就不詳細(xì)介紹了。


作者:黑馬程序員JavaEE培訓(xùn)學(xué)院
首發(fā):http://java.itheima.com/?v2  
分享到:
在線咨詢 我要報(bào)名
和我們在線交談!