還沒(méi)弄明白Java中的this關(guān)鍵字嗎肺素,來(lái)看這篇就夠了

今天在上課時(shí)压怠,冉冉大妹紙拉著我問(wèn):小哥哥飞苇,小哥哥蜗顽,聽說(shuō)你在學(xué)Java,那你知道this關(guān)鍵字嗎雇盖?

我:啊贸街?this啊? (完了完了狸相,學(xué)習(xí)的時(shí)候?qū)W的什么也不是,這下被問(wèn)到了逸尖,還是個(gè)妹紙瘸右,答不上來(lái)豈不尷尬)。

冉冉妹紙:你到底知道嘛太颤?不是吧,不是吧吃谣,聽說(shuō)你學(xué)了很久的Java瓦堵,不會(huì)連this關(guān)鍵字都不知道吧!

我:會(huì)啊澜驮,那還不簡(jiǎn)單惋鸥,等我慢慢給你講來(lái)(giao悍缠,把握住機(jī)會(huì)耐量,加分項(xiàng)啊這可是,必須說(shuō)出點(diǎn)什么)

好了趴拧,來(lái)吧山叮,給你講講this關(guān)鍵字

this關(guān)鍵字的作用:

1、區(qū)分成員變量和局部變量(當(dāng)成員變量和局部變量重名時(shí))

2脑又、可在構(gòu)造方法中調(diào)用同一個(gè)類的其他構(gòu)造方法(但是規(guī)定this只能寫在構(gòu)造方法的第一行)

3锐借、能調(diào)用構(gòu)造方法,當(dāng)然也能調(diào)用普通方法啦(在同一個(gè)類中的方法內(nèi)部钞翔,其實(shí)不必要使用this來(lái)調(diào)用嗅战,直接寫出方法名即可,但是有的人會(huì)認(rèn)為驮捍,寫出this會(huì)讓代碼看起來(lái)更規(guī)范。我認(rèn)為這個(gè)完全沒(méi)必要启具。這里看個(gè)人習(xí)慣吧珊泳。)~

我:你看,這不是很簡(jiǎn)單嗎薯演?

冉冉:什么啊秧了,就這?我知道啊衡创,你這不是在給我說(shuō)點(diǎn)沒(méi)用的話嘛。

我:別氣嘛璃氢,那我再給你扯點(diǎn)(絞盡腦汁的想)

4、this關(guān)鍵字還可以作為當(dāng)前的對(duì)象的引用進(jìn)行返回巢寡,我讓你看看代碼你就理解了

public class Student {
    public Student log2(){
        System.out.println("直接返回一個(gè)Student的引用");
        return this;
    }
}

就這么寫塘秦。你看,多簡(jiǎn)單

冉冉:沒(méi)聽懂,返回什么對(duì)象什么引用啊须误。仇轻。。

我:嗯篷店。。方淤。蹄殃。好吧,那我再給你解釋一下讳苦。再看一下代碼吩谦!

public class TestMain {
    public static void main(String[] args) {
        Student student = new Student();
        Student student2 = student.log2();
        System.out.println(student == student2);
    }
}
image

你看式廷,你 new 個(gè)對(duì)象(對(duì)象引用),然后去調(diào)用log2這個(gè)方法,就會(huì)再返回一個(gè)對(duì)象览绿,此時(shí)這個(gè)對(duì)象和你new的那個(gè)是同一個(gè)穗慕。但是如果你直接return new Student(); 那此時(shí)這個(gè)對(duì)象就是一個(gè)新的對(duì)象,所以說(shuō)怀各,this能返回當(dāng)前對(duì)象(引用)术浪。懂了吧!

冉冉:這樣啊硕蛹,那你這么說(shuō)硕并,我就知道了。

我:再給你掰扯點(diǎn)倔毙,別著急陕赃;

你知道如果有兩個(gè)Student的對(duì)象時(shí),他們都要去調(diào)用同一個(gè)方法么库,怎么才能知道廊散,到底是哪個(gè)對(duì)象在調(diào)用這個(gè)方法呢?比如這樣的代碼

public class Student {
    public void log2(int i) {
        System.out.println(i); 
    }
}```

public class TestMain {
public static void main(String[] args) {
Student s1 = new Student();
Student s2 = new Student();
s1.log2(2);
s2.log2(3);
}
}


是不是覺(jué)得這是兩個(gè)不同對(duì)象的引用啊运准,當(dāng)然能區(qū)分是誰(shuí)在調(diào)用了扮允堋!

其實(shí)本質(zhì)不是這樣滴

你在寫完代碼后米者,編譯器悄悄在幫助你做了一個(gè)工作,為了讓你省心呢胰丁,多么貼心啊,我要是....

冉冉:你倒是說(shuō)啊机蔗,到底做了什么甘萧?

我:好吧;我說(shuō)牙言。怪得。。

當(dāng)你在調(diào)用方法的時(shí)候庞钢,其實(shí)編譯器悄悄在你傳的參數(shù)前邊加了當(dāng)前的對(duì)象因谎,像這樣

s1.log2(s1,2);
s2.log2(s2,3);


當(dāng)然颜懊,如果你這么寫代碼,那編譯器肯定會(huì)說(shuō):這點(diǎn)小事情匠璧,還是我替你做吧咸这,就不麻煩小主人了,然后無(wú)情的給了你一個(gè)紅波浪線酿雪;

冉冉:真的假的啊侄刽,說(shuō)的這么玄乎。

我:害州丹,你還不信杂彭,看下邊的代碼吓揪,我們?cè)诜椒ㄉ献鰝€(gè)小改動(dòng)

public class Student {
public void log2(int i) {
System.out.println(this + " " + i);
}
}```

public class TestMain {
    public static void main(String[] args) {
        Student s1 = new Student();
        Student s2 = new Student();
        System.out.println("s1的地址----->" + s1);
        System.out.println("s2的地址----->" + s2);
        s1.log2(2);
        s2.log2(3);
    }
}

為了能看清楚是不是這樣,我們吧 s1 s2 指向的地址在主方法中打印出來(lái)团秽,發(fā)現(xiàn)和方法中的 this 打印出來(lái)的地址一樣

image

這就說(shuō)明了徙垫,確實(shí)是將對(duì)象給傳了進(jìn)去放棒。

冉冉:啊,我懂了间螟,我知道了厢破,原來(lái)是這樣啊,真神奇摩泪。我...我...

我:你怎么了,還有什么不懂得嗎嚷掠?

冉冉: 區(qū)分變量我總是記不住到底指向的是誰(shuí)....

我:這個(gè)啊荞驴,簡(jiǎn)單,你記住就遠(yuǎn)原則 "this." 這個(gè)this打點(diǎn)調(diào)用的是誰(shuí)霹娄,誰(shuí)就是成員變量鲫骗。如果你的變量出現(xiàn)了同名的情況挎峦,如果不進(jìn)行指向,默認(rèn)就是使用你的局部變量坦胶。

老師:你們倆嘀咕什么呢晴楔?都嘀咕半節(jié)課了税弃,有什么好玩的事情凑队,分享出來(lái),我們大家一起開心嘛西壮!

總結(jié):

由于我個(gè)人覺(jué)得叫惊,如果只是枯燥的堆疊概念,只講述一些術(shù)語(yǔ)抡草,不僅看起來(lái)無(wú)聊蔗坯,看過(guò)之后還會(huì)忘得一干二凈。所以筆記用這種方法展示出來(lái)宾濒,可能更能讓人記憶更深刻。學(xué)習(xí)本來(lái)沒(méi)有固定的方法绘梦,不管怎么學(xué)谚咬,學(xué)會(huì)了就行嘛尚粘!

如有錯(cuò)誤,歡迎指出秉继!一定及時(shí)改正

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末泽铛,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子杠茬,更是在濱河造成了極大的恐慌,老刑警劉巖宁赤,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件栓票,死亡現(xiàn)場(chǎng)離奇詭異走贪,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)坠狡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門擦秽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)感挥,“玉大人,你說(shuō)我怎么就攤上這事触幼。” “怎么了堂鲤?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)媒峡。 經(jīng)常有香客問(wèn)我瘟栖,道長(zhǎng),這世上最難降的妖魔是什么谅阿? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任半哟,我火速辦了婚禮,結(jié)果婚禮上签餐,老公的妹妹穿的比我還像新娘寓涨。我一直安慰自己,他們只是感情好氯檐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布戒良。 她就那樣靜靜地躺著,像睡著了一般冠摄。 火紅的嫁衣襯著肌膚如雪几缭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天拇颅,我揣著相機(jī)與錄音奏司,去河邊找鬼。 笑死樟插,一個(gè)胖子當(dāng)著我的面吹牛韵洋,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播黄锤,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼搪缨,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了鸵熟?” 一聲冷哼從身側(cè)響起副编,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎流强,沒(méi)想到半個(gè)月后痹届,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡打月,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年队腐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奏篙。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柴淘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出秘通,到底是詐尸還是另有隱情为严,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布肺稀,位于F島的核電站第股,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏话原。R本人自食惡果不足惜炸茧,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望稿静。 院中可真熱鬧,春花似錦辕狰、人聲如沸改备。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)悬钳。三九已至盐捷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間默勾,已是汗流浹背碉渡。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留母剥,地道東北人滞诺。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像环疼,于是被迫代替她去往敵國(guó)和親习霹。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348