首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Java 構造方法全解析:重載、鏈式調用、默認構造、繼承鏈與訪問權限控制

     編輯:Java 綜合教學

構造方法語法鐵律

  1. 方法名 = 類名(大小寫敏感)。
  2. 無返回類型聲明(連 void 都不能寫)。
  3. 不可用修飾符:static、final、abstract、synchronized、native。
  4. 不可被繼承,子類無法 override,final/abstract 無意義。

常見誤區辨析

構造方法重載與 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 → 編譯報錯(不可訪問)

執行順序鐵律

  1. 父類靜態變量/靜態塊(按定義順序)
  2. 子類靜態變量/靜態塊
  3. 父類實例變量/實例塊
  4. 父類構造方法
  5. 子類實例變量/實例塊
  6. 子類構造方法

構造方法訪問權限與設計模式

代碼片段性質原因
public int Sample(int x) { return x++; }普通實例方法有返回類型 int
public void Mystery() { ... }普通實例方法有返回類型 void
public Sample() { this(1); }構造方法無返回類型,名稱匹配

private 構造的三大經典用途

  1. 工具類:java.lang.Math 只有 private Math() {},僅提供靜態方法。
  2. 單例模式:私有構造 + 靜態 getInstance() 控制實例數量。
  3. 禁止繼承:所有構造 private → 子類無法調用 super() → 編譯報錯。比 final class 更徹底(連實例化都禁止)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
修飾符可見性典型應用場景
public任意處常規實例化
protected同包 + 子類框架擴展、模板方法模式
default同包包內工廠創建
private僅本類單例模式、工廠方法模式、工具類(如 Math)、禁止繼承/實例化