最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

構(gòu)造方法中的this應(yīng)用及注意事項(xiàng)

2023-09-30 15:25 作者:塵緣如夢_  | 我要投稿

在Java中,"this"可以翻譯為"本對象"或"對象本身",它指向的是當(dāng)前的對象。類比日常生活中的稱呼,當(dāng)別人稱呼你時(shí)應(yīng)該使用你的姓名,比如稱呼"趙云",可以說"趙云很帥"或者"趙云武功很強(qiáng)",但是趙云自己稱呼自己時(shí)應(yīng)該使用"我",比如"我很帥"或者"我武功很強(qiáng)"。在Java中,"我"相當(dāng)于"this"。實(shí)際上,"this"就是一個(gè)變量,本質(zhì)上和普通的引用類型變量一樣。類似于上面的稱呼,無論稱呼"趙云"、"我"還是"你",本質(zhì)都是稱呼,而且稱呼的對象都是趙云。"this"也是如此,和其他該類的引用類型變量一樣,本質(zhì)都是變量,指向的也是同一個(gè)對象,只不過"this"是內(nèi)置的變量而已。 為了讓大家更清楚地理解,我們簡單介紹一下對象的創(chuàng)建過程以及如何與變量關(guān)聯(lián)。比如下面的代碼:

?public static void main(String[] args) {

??User u = new User();

??User u2 = u;

?}

當(dāng)main方法開始運(yùn)行時(shí),Java虛擬機(jī)會(huì)為方法創(chuàng)建"本地變量表",用于存儲(chǔ)方法參數(shù)值和方法內(nèi)的局部變量,比如args、u、u2。之后運(yùn)行方法內(nèi)的代碼new User(),創(chuàng)建User對象,虛擬機(jī)會(huì)在內(nèi)存的堆中創(chuàng)建,比如創(chuàng)建的對象內(nèi)存地址為00000001,然后調(diào)用類的構(gòu)造方法初始化對象。然后將創(chuàng)建的對象賦值給變量u,實(shí)際上在本地變量表中,變量u存放的是對象的內(nèi)存地址00000001。之后User u2 = u,將u賦值給變量u2,也就是將00000001賦值給u2。這樣,變量u和u2指向的就是同一個(gè)對象。

其實(shí),"this"和變量u、u2是一樣的,也會(huì)存儲(chǔ)到本地變量表中,存儲(chǔ)的也是對象的地址。比如:

?public static void main(String[] args) {

???User u = new User();

???User u2 = u;

??

???u.toString();

?}

??

?public class User {

??......

??

???@Override

???public String toString() {

?????String s = "name: " + this.name;

?????s += " , password: " + this.password;

?????return s;

??}

?}

當(dāng)運(yùn)行到u.toString()方法時(shí),Java虛擬機(jī)也會(huì)為該方法創(chuàng)建本地變量表。變量表中第一個(gè)位置存放的就是this,值也是對象的內(nèi)存地址。由此可見,"this"和其他引用變量是沒有本質(zhì)區(qū)別的。

此時(shí),u、u2、this指向的是同一個(gè)對象。驗(yàn)證一下:

?User u = new User();

?u.compare(u);

??

?public void compare(User u){

???if (this == u) {

?????System.out.println("二者指向同一個(gè)對象");

??} else {

?????System.out.println("二者指向不同對象");

??}

?}

調(diào)用compare方法,將變量u作為參數(shù)傳入,讓其與this比較。由于"=="運(yùn)算符用于引用類型時(shí),只有當(dāng)引用指向的是同一個(gè)對象時(shí)才返回真。運(yùn)行輸出結(jié)果為"二者指向同一個(gè)對象"。

為什么要有"this"呢?

?public class User {

???public String name;

???public密碼;

??

???public void setName(String name) {

?????this.name = name;

??}

?}

在上面的代碼中,User類有一個(gè)成員變量name和一個(gè)方法setName,方法用于設(shè)置name的值。在方法中,參數(shù)名和成員變量名都是name,這時(shí)就會(huì)產(chǎn)生命名沖突。為了明確指定是成員變量name,而不是參數(shù)name,就可以使用"this"關(guān)鍵字。this.name表示當(dāng)前對象的成員變量name,name表示方法的參數(shù)name。通過使用"this"關(guān)鍵字,可以消除命名沖突,清楚地指定成員變量。

此外,"this"還可以用于在一個(gè)構(gòu)造方法中調(diào)用該類的其他構(gòu)造方法。比如:

?public class User {

???public String name;

???public String password;

??

???public User() {

?????this("default");

??}

??

???public User(String name) {

?????this(name, "123456");

??}

??

???public User(String name, String password) {

?????this.name = name;

?????this.password = password;

??}

?}

在上面的代碼中,有多個(gè)構(gòu)造方法。當(dāng)調(diào)用不同的構(gòu)造方法時(shí),可以使用"this"來調(diào)用其他構(gòu)造方法。比如,User()構(gòu)造方法中調(diào)用了User(String name)構(gòu)造方法,而User(String name)構(gòu)造方法又調(diào)用了User(String name, String password)構(gòu)造方法。通過使用"this"關(guān)鍵字,可以在構(gòu)造方法中重用代碼,并且方便地傳遞參數(shù)。

總結(jié)一下,"this"關(guān)鍵字在Java中用于指代當(dāng)前對象,可以用于消除命名沖突、調(diào)用其他構(gòu)造方法等。它和普通的引用變量一樣,本質(zhì)上都是指向?qū)ο蟮牡刂贰?/p>

構(gòu)造方法中的this應(yīng)用及注意事項(xiàng)的評論 (共 條)

分享到微博請遵守國家法律
游戏| 汝城县| 枝江市| 苗栗县| 东港市| 淄博市| 南部县| 息烽县| 雅江县| 宕昌县| 江油市| 仙桃市| 思南县| 四会市| 堆龙德庆县| 中西区| 综艺| 吴堡县| 九龙县| 清河县| 报价| 弥渡县| 保康县| 兴宁市| 大新县| 德庆县| 扶风县| 龙游县| 财经| 本溪市| 镇平县| 利川市| 柳州市| 昆明市| 二连浩特市| 尼勒克县| 方城县| 沂水县| 五原县| 黄石市| 海林市|