| 代碼片段 | 性質 | 原因 |
public int Sample(int x) { return x++; } | 普通實例方法 | 有返回類型 int |
public void Mystery() { ... } | 普通實例方法 | 有返回類型 void |
public Sample() { this(1); } | 構造方法 | 無返回類型,名稱匹配 |
構造方法重載與 this 鏈式調用
public class Employee {
private String name;
private int age;
// 全參構造
public Employee(String name, int age) {
this.name = name;
this.age = age;
}
// 缺 age,鏈式調用全參
public Employee(String name) {
this(name, -1); // 必須為第一條語句
}
// 全缺,鏈式調用單參
public Employee() {
this("無名氏"); // 再次鏈式
}
}
this 調用鐵律
- 必須置於構造方法第一行(註釋除外)。
- 只能在構造方法中調用其他構造方法,不能在普通方法中調用。
- 不能通過方法名直接調用(如
Employee("張三") 編譯報錯)。
默認構造方法機制
- 隱含默認構造:類無任何構造方法時,編譯器自動生成
public ClassName() {}。
- 顯式默認構造:開發者手寫無參構造,可任意訪問修飾符(如
protected)。
- 失效條件:類中只要定義了任意帶參構造,且未顯式寫無參構造,則無默認構造,
new ClassName() 編譯報錯。
繼承鏈中的 super 調用規則
public class Sub extends Base {
public Sub(int a, int b) {
super(a); // 必須第一行,顯式調用父類帶參構造
this.b = b;
}
}
// 子類無參構造未寫 super,隱式調用父類無參構造
// 若父類無無參構造 → 編譯報錯
// 若父類無參構造為 private → 編譯報錯(不可訪問)
執行順序鐵律
- 父類靜態變量/靜態塊(按定義順序)
- 子類靜態變量/靜態塊
- 父類實例變量/實例塊
- 父類構造方法
- 子類實例變量/實例塊
- 子類構造方法
構造方法訪問權限與設計模式