我想知道Java中私有构造函数的作用。在Java中使用私有构造函数的不同方法有哪些?
我想知道Java中私有构造函数的作用。在Java中使用私有构造函数的不同方法有哪些?
私有构造函数当然是为了限制类的实例化。
实际上,私有构造函数的一个很好的用途是在单例模式中。以下是一个示例:
public class ClassicSingleton {
private static ClassicSingleton instance = null;
private ClassicSingleton() {
// Exists only to defeat instantiation.
}
public static ClassicSingleton getInstance() {
if(instance == null) {
instance = new ClassicSingleton();
}
return instance;
}
}
这样你可以确保只有一个实例的类是活动的。
其他用途可以是创建一个实用类,该类仅包含静态方法。
要进行更多分析,您可以查看其他Stack Overflow答案
public enum Utility {; public static void fn1() {} }
- Marko Topolnik私有构造函数用于禁止外部初始化该类
应用场景
情况一:创建单例模式时使用
public class SingletonClass {
public static SingletonClass singletonClass;
private SingletonClass() {
}
public static SingletonClass getInstance() {
if(singletonClass == null) {
singletonClass = new SingletonClass();
}
return singletonClass;
}
}
public final class Util {
private Util() {
}
}
在util类中,所有的方法都是静态的,因此不需要创建其对象,在这种情况下,使用私有构造函数。
以下是需要使用私有构造函数的一些情况:
单例模式
工厂方法
仅包含静态方法(实用程序)的类
仅包含常量的类
您也可以参考以下代码:
public class MySingletonEx
{
private static MySingletoneEx instance = new MySingletonEx("This takes a string");;
private MySingletonEx(final String myString)
{
// This is a private constructor
}
public static MySingletonEx getInstance()
{
return instance;
}
}
public FooBuilder {
private FooBuilder(FooBar bar) {
...
}
public static FooBuilder using(FooBar bar) {
return new FooBuilder(bar);
}
}
然后,通过调用静态方法使用它:
FooBuilder.using(bar) // further chained methods etc...
在我看来,一些用法如下:
私有构造函数的另一个用途是确保类的实例只存在于有限的集合中。
例如:
public class Color
{
public static final Color red = new Color("red");
public static final Color yellow = new Color("yellow");
public static final Color blue= new Color("blue");
private Color(String name) {
this.name = name;
}
.
.
.
}
然而,这种用法现在大多被Java枚举所取代。
以下是私有构造函数的一些用途:
2.限制实例创建的数量。
3.防止子类化。