私有构造函数在java中有什么用

我想知道私有构造函数在java中是如何有用的。 这是在java中使用私有构造函数的不同方法。

私有构造函数当然不能限制类的实例化。

实际上私有构造函数的使用是在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溢出答案

Java中的构造函数可以是私有的吗?

在类中创建私有构造函数有什么用?

私人建设者

如果您希望此类不能从外部进行初始化,则使用私有构造函数
用途

案例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类中,所有方法都是静态的,因此不需要创建其对象,因此在这种情况下使用私有构造函数

正如其他提到的答案,常见用途包括单例模式 ,内部构造函数链接以及另外一个:

Java不支持C#中的内容(例如)被称为“静态类” – 换句话说, 实用程序类 。 实用程序类是一个辅助类,它应该只包含静态成员。 ( MathSystem就是Java中的这种情况。)以任何方式实例化它们都没有意义。

在C#中,使类静态使其隐式地为final / sealed和abstract。 在Java中,没有这样的关键字,你不能使类最终抽象。 所以,如果你有这样一个实用程序类,你可以使它成为最终的并给它一个永远不会被调用的私有构造函数。

使用私有构造函数会阻止它由对象外部的任何东西创建。 这通常用于单例模式,它试图确保只存在一个类的实例。

此链接还提供了一些很好的描述……

您可能需要私有构造函数的一些原因:

在以下情况下,为了防止对象外部的实例化:

  1. 独生子

  2. 工厂方法

  3. static-methods-only(实用程序)类

  4. 常量类

您也可以参考以下代码:

 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; } } 

作为其他答案的补充:

如果要创建单例类,则需要隐藏构造函数,因此只能在内部调用它。

恕我直言的一些用法是

  1. 在辛格尔顿
  2. 来自另一个构造函数..

您可能不希望类的用户直接实例化它,而是使用方便的静态方法代替,对于一个非常人为的构建器示例:

 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枚举取代。