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

Java 基礎培訓(七):構造器完整指南與初始化機制

     編輯:Java 相關知識

構造器是對象初始化的核心機制,決定對象創建時的狀態建立方式。本文詳細講解默認構造器、重載規則、訪問控制、調用鏈等關鍵概念。

構造器核心規則

規則說明
無構造器時編譯器自動生成 public 無參構造器
有任意構造器編譯器不再生成默認構造器
重載區分參數類型、數量、順序不同(與參數名無關)
訪問修飾符可為 public/protected/default/private
無返回類型甚至不能寫 void
名稱與類同大小寫敏感

代碼演示:各類構造器場景

class Class1 {
    // 無顯式構造器 → 自動獲得 public Class1() {}
}

class Class2 {
    public Class2() {} // 手寫無參構造器
}

class Class3 {
    public Class3() {}           // 無參
    public Class3(String name) {} // 有參
}

class Class4 {
    public Class4(String name) {} // 僅有參 → 無無參構造器
    // new Class4() 編譯錯誤
}

class Class5 {
    public Class5() {}
    public Class5(String name) {}
    public Class5(int age) {}
    public Class5(String name, int age) {}
}

調用驗證

public static void main(String[] args) {
    new Class1();           // OK - 默認構造器
    new Class2();           // OK - 顯式無參
    new Class3();           // OK - 無參
    new Class3("java");     // OK - 有參
    // new Class4();        // 編譯錯誤 - 無無參構造器
    new Class4("java");     // OK
    new Class5();           // OK
    new Class5("java");     // OK
    new Class5(1);          // OK
    new Class5("java", 1);  // OK
}

常見編譯錯誤場景

  1. 重複簽名:參數類型順序完全相同(即使名字不同)
    public Class4(String name) {}
    public Class4(String address) {} // 錯誤:簽名相同
    
  2. 訪問權限不足:private 構造器外部不可直接 new(單例模式常用)
  3. 跨包訪問 default 構造器:不同包下不可訪問

構造器鏈調用

class Person {
    private String name;
    private int age;
    
    public Person() {
        this("未知", 0); // 調用另一構造器
    }
    
    public Person(String name) {
        this(name, 0);
    }
    
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

最佳實踐

  • 使用 this(...) 避免代碼重複,統一初始化邏輯
  • 不可變類構造器中完成所有字段初始化
  • 考慮構建器模式替代參數過多的構造器
  • 私有構造器實現單例/工廠模式
  • final 字段必須在構造器結束前初始化
構造器編譯錯誤示例
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved