日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

this关键字的作用

發(fā)布時(shí)間:2023/12/16 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 this关键字的作用 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在Java中this關(guān)鍵字的作用有兩個(gè):
1.當(dāng)成員變量與局部變量同名時(shí),用來(lái)區(qū)分成員變量和局部變量;
2.在構(gòu)造函數(shù)中調(diào)用構(gòu)造函數(shù)。
下面我們來(lái)詳細(xì)解釋一下這兩句話:
1.區(qū)分成員和局部變量:
有時(shí)我們?yōu)榱俗屪兞扛哂姓Z(yǔ)義化,經(jīng)常會(huì)出現(xiàn)成員變量和局部變量同名的問(wèn)題,這時(shí)候就要用到this了,比如以下代碼:

class Word{public static void main(String[] args) {Demo d=new Demo("張三");} } class Demo{String name;Demo(String name){this.name=name;} }

如果我們不加this關(guān)鍵字,打印出的結(jié)果是null;如果我們用this.name打印出的結(jié)果是張三,為什么呢?
當(dāng)創(chuàng)建新對(duì)象的時(shí)候,構(gòu)造函數(shù)會(huì)被自動(dòng)調(diào)用,我們傳的參數(shù)是“張三”,在構(gòu)造函數(shù)Demo()里會(huì)定義一個(gè)名稱為name的變量來(lái)接收這個(gè)數(shù)據(jù)“張三”,然后進(jìn)行賦值的動(dòng)作。
如果寫(xiě)成name=name;就相當(dāng)于我們把“張三”這個(gè)值又賦給了它自己,這個(gè)棧里的變量對(duì)自己進(jìn)行重寫(xiě),這是毫無(wú)意義的,所以我們?cè)趺床拍馨阉x值給堆里的變量name(也就是成員變量name)呢?這就要用到關(guān)鍵字this了。
其實(shí)每個(gè)函數(shù)里面其實(shí)都有一個(gè)默認(rèn)的this引用,當(dāng)對(duì)象調(diào)用函數(shù)的時(shí)候,將對(duì)象的地址賦給this關(guān)鍵字,此時(shí)this關(guān)鍵字可以指向?qū)ο?#xff0c;通過(guò)this就可以訪問(wèn)成員變量了(就是對(duì)象的屬性)。用語(yǔ)言解釋可能比較蒼白,我們先舉例后上圖:

class Person {private String name;private int age; Person(String name) {this();this.name = name;} public static void main(String[] args) {Person p = new Person("旺財(cái)");}


所以說(shuō),其實(shí)this放的是對(duì)象的地址,我們可以打印出this的結(jié)果:

class Word{public static void main(String[] args) {Demo d=new Demo();} } class Demo{Demo(){System.out.println(this);} }


可以看到this的結(jié)果是一個(gè)哈希地址,@左邊代表Demo類型,右邊是地址(我的理解是,this就是一個(gè)萬(wàn)能引用變量,當(dāng)函數(shù)被某種類型的對(duì)象調(diào)用時(shí),默認(rèn)的this就引用某種類型的對(duì)象,存放其地址,以此來(lái)達(dá)到指向?qū)ο?#xff0c;修改對(duì)象屬性的目的)。
其實(shí)我們平時(shí)寫(xiě)函數(shù)的時(shí)候,如果局部變量沒(méi)有和成員變量沖突的情況時(shí),是可以不用寫(xiě)this的,因?yàn)闂V袥](méi)有這個(gè)變量名,它會(huì)去堆中找這個(gè)變量,當(dāng)去堆中找的時(shí)候,其實(shí)是幫我們默認(rèn)加上this了,即:

public void speak(){System.out.println(this.name+":"+this.age);}

public void speak(){System.out.println(name+":"+age);}

是一樣的,雖然我們不寫(xiě),但是其實(shí)默認(rèn)是有的。

2.this的第二種使用方式:在構(gòu)造函數(shù)中調(diào)用另一個(gè)構(gòu)造函數(shù)。
我們知道,構(gòu)造函數(shù)只能在對(duì)象創(chuàng)建的時(shí)候調(diào)用僅調(diào)用一次,但是利用this關(guān)鍵字可以在構(gòu)造函數(shù)中調(diào)用構(gòu)造函數(shù):

在第二個(gè)構(gòu)造函數(shù)中調(diào)用第一個(gè)構(gòu)造函數(shù),如果當(dāng)一個(gè)對(duì)象創(chuàng)建的時(shí)候調(diào)用第二個(gè)構(gòu)造函數(shù),那么此時(shí)this 就指向這個(gè)對(duì)象(可以說(shuō)是這個(gè)對(duì)象的名稱吧),如果this(name),可以調(diào)用第一個(gè)構(gòu)造函數(shù),此時(shí)第一個(gè)構(gòu)造函數(shù)里的this也有了這個(gè)對(duì)象的地址,可以初始化對(duì)象。我們畫(huà)出內(nèi)存圖解。

但是值得注意的一點(diǎn)是:調(diào)用構(gòu)造函數(shù)的語(yǔ)句一定要寫(xiě)在第一行,因?yàn)闃?gòu)造函數(shù)的作用是初始化,不能將初始化語(yǔ)句放在后面。函數(shù)是一個(gè)封裝體,如果傳的參數(shù)進(jìn)去得到另一個(gè)值,那么功能就改變了,是一種極其不嚴(yán)謹(jǐn)?shù)男袨?#xff0c;所以將初始化語(yǔ)句放在后面是會(huì)編譯報(bào)錯(cuò)的。這也是為什么不能在普通函數(shù)中調(diào)用構(gòu)造函數(shù)的原因,一定要先初始化。

總結(jié)

以上是生活随笔為你收集整理的this关键字的作用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。