This answer表示我们不能通过private
构造函数一次实例化多个对象。我修改了恰恰相反的代码:
class RunDatabase{
public static void main(String[] args){
Database db = Database.getInstance("hello");//Only one object can be instantiated at a time
System.out.println(db.getName());
Database db1 = Database.getInstance("helloDKVBAKHVBIVHAEFIHB");
System.out.println(db1.getName());
}
}
class Database {
//private static Database singleObject;
private int record;
private String name;
private Database(String n) {
name = n;
record = 0;
}
public static synchronized Database getInstance(String n) {
/*if (singleObject == null) {
Database singleObject = new Database(n);
}
return singleObject;*/
return new Database(n);
}
public void doSomething() {
System.out.println("Hello StackOverflow.");
}
public String getName() {
return name;
}
}
正如预期的那样,两个字符串都被打印出来。我错过了什么吗?
答案 0 :(得分:2)
我们不能通过私有构造函数一次实例化多个对象。
不,我们可以。 private
构造函数仅避免在类外部创建实例。因此,您有责任决定应在何种情况下创建新对象。
正如预期的那样,两个字符串都被打印出来。我错过了什么吗?
每次调用getInstance
方法时,您都在创建一个新实例。但是您的注释代码包含单例模式的标准延迟初始化实现。取消注释这些部分以查看差异。
您可以查看here的其他单例实现。
答案 1 :(得分:1)
私有构造函数用于阻止其他类创建包含私有构造函数的“Class”对象。
这样做是为了提供单例模式,其中只使用了一个类的实例。
您提到的代码应该只创建该类的一个实例,并仅使用该实例来执行该类的所有操作。但是你修改了违反单例设计模式的代码。
答案 2 :(得分:1)
为什么我们需要私有构造函数?
基本上有三个原因:
如果您不希望该类用户直接创建对象,而是使用构建器或类似物,
如果您只为常量定义了一个类,那么您需要密封该类,以便JVM不会在运行时为您创建该类的实例。
单身