今天在上課時,冉冉大妹紙拉著我問:小哥哥,小哥哥,聽說你在學Java,那你知道this關鍵字嗎?
我:啊?this啊? (完了完了,學習的時候學的什么也不是,這下被問到了,還是個妹紙,答不上來豈不尷尬),
冉冉妹紙:你到底知道嘛?不是吧,不是吧,聽說你學了很久的Java,不會連this關鍵字都不知道吧!
我:會啊,那還不簡單,等我慢慢給你講來(giao,把握住機會,加分項啊這可是,必須說出點什么)
好了,來吧,給你講講this關鍵字
this關鍵字的作用:
1、區分成員變數和區域變數(當成員變數和區域變數重名時)
2、可在構造方法中呼叫同一個類的其他構造方法(但是規定this只能寫在構造方法的第一行)
3、能呼叫構造方法,當然也能呼叫普通方法啦(在同一個類中的方法內部,其實不必要使用this來呼叫,直接寫出方法名即可,但是有的人會認為,寫出this會讓代碼看起來更規范,我認為這個完全沒必要,這里看個人習慣吧,)~
我:你看,這不是很簡單嗎?
冉冉:什么啊,就這?我知道啊,你這不是在給我說點沒用的話嘛,
我:別氣嘛,那我再給你扯點(絞盡腦汁的想)
4、this關鍵字還可以作為當前的物件的參考進行回傳,我讓你看看代碼你就理解了
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);
}
}

你看,你 new 個物件(物件參考),然后去呼叫log2這個方法,就會再回傳一個物件,此時這個物件和你new的那個是同一個,但是如果你直接return new Student(); 那此時這個物件就是一個新的物件,所以說,this能回傳當前物件(參考),懂了吧!
冉冉:這樣啊,那你這么說,我就知道了,
我:再給你掰扯點,別著急;
你知道如果有兩個Student的物件時,他們都要去呼叫同一個方法,怎么才能知道,到底是哪個物件在呼叫這個方法呢?比如這樣的代碼
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);
}
}
是不是覺得這是兩個不同物件的參考啊,當然能區分是誰在呼叫了啊!
其實本質不是這樣滴
你在寫完代碼后,編譯器悄悄在幫助你做了一個作業,為了讓你省心呢,多么貼心啊,我要是....
冉冉:你倒是說啊,到底做了什么?
我:好吧;我說,,,
當你在呼叫方法的時候,其實編譯器悄悄在你傳的引數前邊加了當前的物件,像這樣
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 指向的地址在主方法中列印出來,發現和方法中的 this 列印出來的地址一樣

這就說明了,確實是將物件給傳了進去,
冉冉:啊,我懂了,我知道了,原來是這樣啊,真神奇,我...我...
我:你怎么了,還有什么不懂得嗎?
冉冉: 區分變數我總是記不住到底指向的是誰....
我:這個啊,簡單,你記住就遠原則 "this." 這個this打點呼叫的是誰,誰就是成員變數,如果你的變數出現了同名的情況,如果不進行指向,默認就是使用你的區域變數,
老師:你們倆嘀咕什么呢?都嘀咕半節課了,有什么好玩的事情,分享出來,我們大家一起開心嘛!
總結:
由于我個人覺得,如果只是枯燥的堆疊概念,只講述一些術語,不僅看起來無聊,看過之后還會忘得一干二凈,所以筆記用這種方法展示出來,可能更能讓人記憶更深刻,學習本來沒有固定的方法,不管怎么學,學會了就行嘛!
如有錯誤,歡迎指出!一定及時改正
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/184859.html
標籤:其他
