當成員變數與方法參數或局部變數同名時,this 代表當前物件的成員變數。
public class Student {
String name; // 成員變數
private void setName(String name) { // 參數 name
this.name = name; // this.name 為成員變數,name 為參數
}
}
原理:Java 編譯器依據 this. 前綴判斷為實例欄位,無前綴則優先匹配局部作用域變數。即使不加 this,編譯器也會隱式將左邊視為成員變數,但顯式使用 this. 能顯著提升代碼可讀性,明確表達「賦值給物件屬性」的意圖。
this(...) 必須置於構造器第一行,用於鏈式調用同類其他構造器,減少重複初始化代碼。
public class Student {
public Student() {
this("luobo"); // 必須是第一句,調用下方帶參構造器
}
public Student(String name) {
// 實際初始化邏輯
}
}
限制:不能在普通方法中使用 this(...),也不能在構造器非首行調用,否則編譯報錯。
return this; 可實現方法鏈或將當前實例傳遞給調用者。
public Student setName(String name) {
this.name = name;
return this; // 支援鏈式調用:student.setName("A").setAge(18);
}
此時 this 相當於物件自身的引用,類似於 return 當前實例。
在實例方法或構造器中,this 就是調用該方法的物件引用。理解這一點,上述三種用法自然統一:
this.field → 訪問該物件的欄位this(...) → 調用該物件的另一個構造器return this → 返回該物件引用this.field = param,提升可讀性。this。