還沒弄明白Java中的this關(guān)鍵字嗎,那來看這篇就夠了!

今天在上課時,冉冉大妹紙拉著我問:小哥哥,小哥哥,聽說你在學Java,那你知道this關(guān)鍵字嗎?

我:?。縯his啊? (完了完了,學習的時候?qū)W的什么也不是,這下被問到了,還是個妹紙,答不上來豈不尷尬)。

冉冉妹紙:你到底知道嘛?不是吧,不是吧,聽說你學了很久的Java,不會連this關(guān)鍵字都不知道吧!

我:會啊,那還不簡單,等我慢慢給你講來(giao,把握住機會,加分項啊這可是,必須說出點什么)

好了,來吧,給你講講this關(guān)鍵字


image.png

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

1、區(qū)分成員變量和局部變量(當成員變量和局部變量重名時)

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

3、能調(diào)用構(gòu)造方法,當然也能調(diào)用普通方法啦(在同一個類中的方法內(nèi)部,其實不必要使用this來調(diào)用,直接寫出方法名即可,但是有的人會認為,寫出this會讓代碼看起來更規(guī)范。我認為這個完全沒必要。這里看個人習慣吧。)~

我:你看,這不是很簡單嗎?

冉冉:什么啊,就這?我知道啊,你這不是在給我說點沒用的話嘛。

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

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


public class Student {

 public Student log2(){

        System.out.println("直接返回一個Student的引用");

 return this;

    }

}

就這么寫。你看,多簡單

冉冉:沒聽懂,返回什么對象什么引用啊。。。

我:嗯。。。。好吧,那我再給你解釋一下。再看一下代碼!



public class TestMain {

 public static void main(String[] args) {

        Student student = new Student();

        Student student2 = student.log2();

        System.out.println(student == student2);

    }
}

image.png

你看,你 new 個對象(對象引用),然后去調(diào)用log2這個方法,就會再返回一個對象,此時這個對象和你new的那個是同一個。但是如果你直接return new Student(); 那此時這個對象就是一個新的對象,所以說,this能返回當前對象(引用)。懂了吧!

冉冉:這樣啊,那你這么說,我就知道了。

我:再給你掰扯點,別著急;

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



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);

    }

}

是不是覺得這是兩個不同對象的引用啊,當然能區(qū)分是誰在調(diào)用了?。?/p>

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

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

冉冉:你倒是說啊,到底做了什么?

我:好吧;我說。。。

當你在調(diào)用方法的時候,其實編譯器悄悄在你傳的參數(shù)前邊加了當前的對象,像這樣



s1.log2(s1,2);

s2.log2(s2,3);

當然,如果你這么寫代碼,那編譯器肯定會說:這點小事情,還是我替你做吧,就不麻煩小主人了,然后無情的給了你一個紅波浪線;

冉冉:真的假的啊,說的這么玄乎。

我:害,你還不信,看下邊的代碼,我們在方法上做個小改動



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 指向的地址在主方法中打印出來,發(fā)現(xiàn)和方法中的 this 打印出來的地址一樣

image.png

這就說明了,確實是將對象給傳了進去。

冉冉:啊,我懂了,我知道了,原來是這樣啊,真神奇。我...我...

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

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

我:這個啊,簡單,你記住就遠原則 "this." 這個this打點調(diào)用的是誰,誰就是成員變量。如果你的變量出現(xiàn)了同名的情況,如果不進行指向,默認就是使用你的局部變量。

老師:你們倆嘀咕什么呢?都嘀咕半節(jié)課了,有什么好玩的事情,分享出來,我們大家一起開心嘛!

總結(jié):

由于我個人覺得,如果只是枯燥的堆疊概念,只講述一些術(shù)語,不僅看起來無聊,看過之后還會忘得一干二凈。所以筆記用這種方法展示出來,可能更能讓人記憶更深刻。學習本來沒有固定的方法,不管怎么學,學會了就行嘛!

作者:一條不會寫作的碼農(nóng)
原文鏈接:https://blog.csdn.net/weixin_44231805/article/details/109184166

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容