public class DBSingleton {
private static DBSingleton instance = new DBSingleton();
private DBSingleton() {
// why do we need this constructor
}
public static DBSingleton getInstance() {
return instance;
}
}
私人构造函数如何帮助我?
我的意思是所有变量和方法都是静态的,即使我将构造函数公开,它也不会改变任何东西 让我们说有人创建我的单例对象什么都不会发生,因为这个类中的所有内容都是静态的,这意味着与类本身而不是对象相关联。 Java静态属性共享给所有对象。
请有人给我合理的例子吗
答案 0 :(得分:0)
您需要一个私有构造函数来阻止用户实例化您的类。
如果您将构造函数设为公开,则用户可以执行DBSingleton singleton = new DBSingleton()
,您的课程将不会是单身人士!
答案 1 :(得分:0)
单例类(编辑:与单例实例进行比较 - 参见注释)甚至不一定需要实例化;它足以给它一个私有构造函数并声明所有其他方法是静态的,强制用户在类上调用它们。
构造函数必须是私有的,以确保类是单例,无论您是否创建它的单个实例。如果没有声明私有构造函数,Java会自动为它提供一个公共的无参数构造函数。
这个类可能是一个单独的实例,大概是为了安全,也就是说,如果你想调用它上面的方法,就像那个单例所说的那样。如果你有一个类的实例没有明确地成为一个单例,那么当你调用它运行单例实现的方法时,并不能保证,因为你实际上可能有一个DBSingleton
的子类,其中所述方法被覆盖。 (如果您将其作为DBSingleton.someMethod()
调用,您当然会得到预期的行为,但如果您这样做:
DBSingleton dbsInstance = DBSingleton.getInstance();
// ... all sorts of code, some of which might affect dbsInstance
dbsInstance.someMethod();
所有投注都已关闭。)
声明一个类以避免其他实例的更合适的方法是将其声明为final。你给它一个私有的构造函数,以便它也无法实例化。 (最终类或具有私有构造函数的类(或者更确切地说,零非私有构造函数)足以使类不可重写。)