我想知道私有构造函数在java中是如何有用的。 这是在java中使用私有构造函数的不同方法。
答案 0 :(得分:38)
私有构造函数当然不能限制类的实例化。
实际上私有构造函数的好用是Singleton Pattern。这是一个例子
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溢出答案
Can a constructor in Java be private?
答案 1 :(得分:8)
私有构造函数
的用途强>
案例1:创建sington类时
public class SingletonClass {
public static SingletonClass singletonClass;
private SingletonClass() {
}
public static SingletonClass getInstance() {
if(singletonClass == null) {
singletonClass = new SingletonClass();
}
return singletonClass;
}
}
在这种情况下,只有初始化由getInstance方法完成。没有人可以在外面创建Single of SingletonClass表单。
案例2:,当您不想要像util类
public final class Util {
private Util() {
}
}
在util类中,所有方法都是静态的,因此不需要创建其对象,因此在这种情况下使用私有构造函数
答案 2 :(得分:8)
正如其他提到的答案,常见用途包括单件模式,内部构造函数链接以及另外一个:
Java不支持C#中的内容(例如)被称为“静态类” - 换句话说,实用程序类。实用程序类是一个辅助类,它应该只包含静态成员。 (Math
和System
是Java中的这种情况。)以任何方式实例化它们都没有意义。
在C#中,使类静态使其隐式地为final / sealed和abstract。在Java中,没有这样的关键字,你不能使类最终和抽象。所以,如果你有这样一个实用程序类,你可以使它成为最终的并给它一个永远不会被调用的私有构造函数。
答案 3 :(得分:5)
使用私有构造函数会阻止它由对象外部的任何东西创建。这通常用在像singleton模式这样的地方,它试图确保只存在一个类的实例。
This link also提供了一些很好的描述......
答案 4 :(得分:4)
您可能需要私有构造函数的一些原因:
在以下情况下防止对象外部的实例化:
单
工厂方法
static-methods-only(utility)class
常量类
您也可以参考以下代码:
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;
}
}
答案 5 :(得分:2)
作为其他答案的补充:
如果要创建单例类,则需要隐藏构造函数,因此只能在内部调用。
答案 6 :(得分:1)
恕我直言,有些用法是
答案 7 :(得分:1)
您可能不希望该类的用户直接实例化它,而是使用方便的静态方法代替,对于一个非常人为的构建器示例:
public FooBuilder {
private FooBuilder(FooBar bar) {
...
}
public static FooBuilder using(FooBar bar) {
return new FooBuilder(bar);
}
}
然后通过调用静态方法使用它:
FooBuilder.using(bar) // further chained methods etc...
答案 8 :(得分:0)
当你不希望某个特定的类被实例化时。
答案 9 :(得分:0)
私有构造函数的另一个用途是确保只存在一组有限的类实例。
例如:
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枚举取代。
答案 10 :(得分:0)
这是私有构造函数的一些用途。
2。限制实例创建的次数。
3。防止子类化。