构造方法私有化是单例模式的基石,通过private修饰禁止外部new实例,强制对象创建权归类内部;再配合静态变量保存唯一实例和公共静态方法提供全局访问,才能确保全局唯一性与线程安全。

Java 构造方法私有化是实现单例模式的关键一步,它通过禁止外部直接 new 实例,把对象创建权收归类内部,再配合静态方法统一提供唯一实例。
私有构造方法是单例的基石
把构造方法声明为 private,外部代码就无法调用 new Singleton()。这是强制“只能有一个实例”的第一道防线。没有这一步,任何单例写法都形同虚设。
静态实例 + 公共获取方法
在类内部定义一个 static 的本类引用,并提供一个 public static 方法返回它:
- 饿汉式:类加载时就初始化实例,线程安全但不延迟
- 懒汉式(基础版):首次调用
getInstance()时才创建,需加synchronized保证线程安全 - 双重检查锁(推荐):用
volatile防止指令重排,兼顾延迟加载与线程安全 - 静态内部类:利用类加载机制天然线程安全,又实现懒加载
典型写法示例(双重检查锁)
这是生产环境常用、平衡性能与安全的选择:
public class Singleton {
private static volatile Singleton instance;
private Singleton() {} // 私有化,外部无法 new
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
为什么不能只靠私有构造?
仅私有构造方法还不够——它只阻止了外部实例化,但没解决“如何确保只创建一次”和“多线程下是否安全”的问题。必须搭配:
• 静态变量保存唯一实例
• 同步控制或类加载机制保障初始化一次
• 公共静态方法作为唯一出口
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











