private的构造函数

package nuaa;
public class Xxx{
  public int a;
     private Xxx(int a){
      this.a=a;
      System.out.println("this.a="+this.a);
      
     }
     /*
     public static void main(String[] args){
         Xxx  duixiang= new Xxx(68);
         int a=5;
         System.out.println(duixiang.a+a);  
       
      
     }
      
 */


}

 

 

 

package nuaa;
public class Yanzheng{
    public static void main(String[] args){
       Xxx jpu=new Xxx(334);
      
     
    } 
  
}

 

private constructor的方法在类内部可以实例化,在类外部不可以实例化

在单例模式中,private 构造函数是实现单例模式的关键,它可以防止外部代码直接创建类的对象,从而确保类只有一个实例。以下是几种常见的单例模式中使用 private 构造函数的方法: #### 饿汉式单例模式 饿汉式单例模式在类加载时就创建了单例实例,是线程安全的。 ```cpp class Singleton { private: // private 构造函数 Singleton() {} // 静态单例对象指针 static Singleton* instance; public: // 静态方法获取单例实例 static Singleton* getInstance() { return instance; } }; // 初始化静态成员变量 Singleton* Singleton::instance = new Singleton(); ``` 在上述代码中,`Singleton` 类的构造函数被声明为 private,外部无法直接创建 `Singleton` 对象。`instance` 是一个静态成员变量,在类加载时就被初始化,通过 `getInstance` 方法可以获取该单例实例。 #### 懒汉式单例模式(非线程安全) 懒汉式单例模式在第一次使用时才创建单例实例。 ```cpp class Singleton { private: // private 构造函数 Singleton() {} // 静态单例对象指针 static Singleton* instance; public: // 静态方法获取单例实例 static Singleton* getInstance() { if (instance == nullptr) { instance = new Singleton(); } return instance; } }; // 初始化静态成员变量 Singleton* Singleton::instance = nullptr; ``` 在上述代码中,`getInstance` 方法在第一次调用时会检查 `instance` 是否为空,如果为空则创建一个新的 `Singleton` 对象。但这种实现方式在多线程环境下可能会出现多个线程同时创建对象的问题,是非线程安全的。 #### 懒汉式单例模式(线程安全) 为了保证懒汉式单例模式在多线程环境下的线程安全,可以使用互斥锁。 ```cpp #include <mutex> class Singleton { private: // private 构造函数 Singleton() {} // 静态单例对象指针 static Singleton* instance; // 互斥锁 static std::mutex mtx; public: // 静态方法获取单例实例 static Singleton* getInstance() { std::lock_guard<std::mutex> lock(mtx); if (instance == nullptr) { instance = new Singleton(); } return instance; } }; // 初始化静态成员变量 Singleton* Singleton::instance = nullptr; std::mutex Singleton::mtx; ``` 在上述代码中,使用 `std::mutex` 来保证线程安全,`std::lock_guard` 会在 `getInstance` 方法退出时自动释放锁。 #### 静态局部变量实现单例模式(线程安全) C++11 及以后的标准保证了静态局部变量的初始化是线程安全的。 ```cpp class Singleton { private: // private 构造函数 Singleton() {} public: // 静态方法获取单例实例 static Singleton& getInstance() { static Singleton instance; return instance; } }; ``` 在上述代码中,`getInstance` 方法中的 `instance` 是一个静态局部变量,在第一次调用 `getInstance` 方法时初始化,并且是线程安全的。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值