首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java 私有構造器誤區:數組聲明 ≠ 對象創建,單例模式正確理解

     編輯:程式設計疑難解答

初學者見 `private Constructor()` 即以為「完全無法創建對象」,實則私有構造器僅限制外部直接 `new`,類內部靜態方法仍可創建實例。且數組聲明 `Connection[] arr` 完全不涉及對象實例化。

代碼場景還原

class Connection {
    private Connection() {}  // 私有構造器
    public static Connection getInstance() {  // 類內部可創建
        return new Connection();
    }
}

// 某類中
Connection[] conns = new Connection[10];  // ✅ 僅分配引用數組,10 個 null
// conns[0] = new Connection();  // ❌ 外部編譯錯誤
// conns[0] = Connection.getInstance();  // ✅ 正確獲取實例

核心知識點

概念說明
私有構造器阻止 new ClassName(),不阻止類內部創建、反射創建、反序列化創建
數組聲明Type[] arr = new Type[n] 僅分配 n 個 null 引用槽位,零對象創建
單例模式私有構造器 + 靜態工廠方法 + 靜態內部類/雙重檢查鎖 實現線程安全單例

標準線程安全單例模板

public final class Singleton {
    private Singleton() {}
    private static class Holder {
        static final Singleton INSTANCE = new Singleton();
    }
    public static Singleton getInstance() {
        return Holder.INSTANCE;
    }
}

延伸:何時用私有構造器?

  • 工具類(`Collections`、`Math`)防止實例化
  • 單例模式控制實例數量
  • 構建器模式強制使用 `Builder` 創建
  • 類型安全枚舉模式(Enum 更好)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved