this 代表當前對象實例,是 Java 區分實例成員與局部變量、實現構造器鏈調用、支援遞歸調用的關鍵語法。本文通過實例代碼系統講解三大核心場景。
| 場景 | 語法 | 說明 |
|---|---|---|
| 訪問實例變量 | this.field | 區分同名局部變量/參數 |
| 調用實例方法 | this.method() | 當前對象的方法調用 |
| 構造器鏈調用 | this(args) | 無參構造調用有參構造,必須置於首行 |
public class Student {
private String name = "張三";
private int sum = 0;
// 1. 構造器鏈:無參調用有參
public Student() {
this("王五"); // 必須第一行
}
public Student(String name) {
this.name = name; // 2. 區分參數 name 與實例變量 name
}
public void say() {
System.out.println(this.name); // 3. 調用實例方法
}
// 遞歸求和示範
public void sum(int num) {
this.sum += num--; // 累加實例變量
if (0 < num) {
sum(num); // 遞歸調用(隱含 this.sum())
} else {
System.out.println("sum = " + this.sum);
this.say(); // 遞歸終點調用實例方法
}
}
public static void main(String[] args) {
Student s = new Student(); // 觸發無參構造 -> 有參構造
s.sum(5); // 輸出 sum=15 並印出 name
}
}
new Student() → 調用無參構造this("王五") → 調用有參構造,將 name 設為「王五」s.sum(5) → 遞歸累加 5+4+3+2+1=15,存入實例變量 sumthis.say() → 輸出「王五」this() 不能出現在構造器非首行位置this(無當前實例)class Outer {
int value = 10;
class Inner {
int value = 20;
void print() {
System.out.println(this.value); // 20 (Inner 實例)
System.out.println(Outer.this.value); // 10 (Outer 實例)
}
}
}
內部類可用 OuterClass.this 訪問外部類實例成員。