在 Java 學習過程中,this 關鍵字是一個既基礎又容易讓初學者困惑的概念。本文將結合《Thinking in Java》經典案例,從底層原理、通俗理解到代碼實戰三個維度,徹底講透 this 的本質。
簡單來說:this 代表調用當前方法的那個對象的引用(句柄)。
當我們創建多個同類型對象並調用同一方法時,JVM 如何區分是哪個對象在調用?編譯器會在幕後自動傳遞一個隱含參數——當前對象的引用,這就是 this。
class Banana {
void f(int i) {
// 方法體
}
}
Banana a = new Banana();
Banana b = new Banana();
a.f(1);
b.f(2);
編譯器實際執行的邏輯等價於:
Banana.f(a, 1); // a 調用 f(),this 指向 a Banana.f(b, 2); // b 調用 f(),this 指向 b
此時 this 就在方法內部秘密存在,指向調用該方法的具體對象。
public class Leaf {
private int i = 0;
Leaf increment() {
i++;
return this; // 返回當前對象引用
}
void print() {
System.out.println("i = " + i);
}
public static void main(String[] args) {
Leaf x = new Leaf();
x.increment().increment().increment().print(); // 輸出 i = 3
}
}
執行流程解析:
x 指向 new Leaf()x.increment() 時,this 指向 xthis(即 x 的引用),從而實現鏈式調用print() 時,this 仍指向同一個對象 x| 用法 | 說明 | 代碼示例 |
|---|---|---|
| 區分同名變量 | 區分實例變量與局部變量/參數 | this.name = name; |
| 構造器鏈式調用 | 在構造器中調用另一個構造器 | this(name, age); |
| 返回當前對象 | 實現鏈式調用/流式 API | return this; |
this 是對象本身,實際是引用(內存地址)this(編譯報錯,因為靜態方法屬於類,不屬於對象)this 區分字段,提高代碼可讀性return this;this 是 Java 實現面向對象多態性的關鍵機制之一。它由編譯器自動維護,始終指向「正在調用當前方法的那個對象」。理解 this 的本質是引用而非對象本身,掌握其在構造器鏈、鏈式調用、變量遮蔽中的應用,能寫出更優雅、健壯的 Java 代碼。