this關(guān)鍵字奸忽,只能在方法的內(nèi)部使用燥滑,表示的是調(diào)用這個方法的那個對象的引用纺弊,this關(guān)鍵字的使用和平時new出來的對象引用的使用沒什么區(qū)別筛璧。
需要注意的是,如果是在方法內(nèi)部調(diào)用同一個類的另一個方法惹恃,就不用使用this關(guān)鍵字了夭谤。直接調(diào)用方法就行,因為即使你不寫巫糙,編譯器會自動幫你加上this關(guān)鍵字朗儒,但是你寫的話也不會出錯。
this關(guān)鍵字的使用時機(jī)是参淹,只有當(dāng)有明確要求指出要得到調(diào)用當(dāng)前方法的這個引用的時候醉锄,方使用this關(guān)鍵字。
public class demo04 {
public static void main(String[] args) {
new Person().eat(new Apple());
}
}
/**
* 人類:
* 人有一個動作浙值,吃恳不,吃的時候傳入一個蘋果
*/
class Person {
public void eat(Apple apple) {
Apple peeled = apple.getPeeler();
System.out.println("yummy");
}
}
/**
* 削皮機(jī):傳入一個蘋果就可把這個蘋果削皮
*/
class Peeler {
static Apple peel(Apple apple) {
return apple;
}
}
/**
* 蘋果類:假如由于某種特別的原因,削皮這個操作不能再削皮機(jī)這個類中完成开呐,
* 只能在蘋果類中調(diào)用削皮機(jī)烟勋,這個時候,可以通過this關(guān)鍵字筐付,把自己的apple
* 實例卵惦,傳入到削皮機(jī)的方法中
*/
class Apple {
Apple getPeeler() {
return Peeler.peel(this);
}
}
上面的代碼演示了,this關(guān)鍵字將當(dāng)前對象傳遞給其它方法家妆。
對于this關(guān)鍵字的核心理解很簡單鸵荠,其實當(dāng)使用一個方法的時候,我們?nèi)绻胫郎思降资钦l使用了這個方法蛹找,那么我們就可以用this關(guān)鍵字,把這個對象召喚出來哨坪。
public class demo5 {
public static void main(String[] args) {
Student liming = new Student("黎明");
System.out.println(liming);
}
}
class Student{
private String name;
public Student(String name) {
this.name = name;
System.out.println(this);
}
}
上面的代碼我們做了一個實驗庸疾,創(chuàng)建了一個學(xué)生類,重寫了他的構(gòu)造器当编,我們在構(gòu)造器中打印了this關(guān)鍵字届慈,并在main方法中打印了通過new創(chuàng)建出來的實例對象,看看這個this關(guān)鍵字和通過new出來的實例對象的引用liming忿偷,他們是不是指向同一個實例金顿。
test_startic.Student@4554617c
test_startic.Student@4554617c
通過控制臺的打印,我們看出來鲤桥,他們的地址實際上是一摸一樣的揍拆。也就是說,this關(guān)鍵字茶凳,指向的東西嫂拴,就是new出來的那個對象播揪。他們兩個是同一個東西兩種不同存在形式。