初學者見 `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;
}
}