如何使用私有构造函数创建类的对象?

时间:2018-12-27 13:09:45

标签: java oop constructor core

如果将构造函数用于对象的初始化而不是对象的创建,那么对于具有私有构造函数的类,为什么不能在另一个类中创建对象?

class Test1 {
    private Test1() {

    }
    void one() {

    }
    Test1 t1=new Test1();
    void two() {
        t1.one();
    }
}
class Test {
    public static void main(String[] args) {
        Test1 t1=new Test1();// line 3
    }
}

在上面的代码中,第3行出现错误。

由于new关键字创建了一个对象,而不是调用构造函数,因此我有什么方法可以创建Test1类的对象?

6 个答案:

答案 0 :(得分:1)

如果看不到构造函数,则无法从外部调用它。

有一些用例:

  1. Singleton-Pattern-只有一个实例,该实例保存在静态成员变量中。
  2. 该类仅由静态方法和常量组成,并且不使用此类实例(例如java.lang.Math
  3. 该类的实例是通过静态工厂方法创建的。这使作者可以自由地重构其构造函数,而不会破坏公共API。此外,他可以声明静态方法以返回更通用的接口类型,而不是具体类型。

答案 1 :(得分:0)

this article所述:

  

私有构造函数的使用是为单例类提供服务。一种   单例类是一种将对象创建数量限制为   一。使用私有构造函数,我们可以确保不超过一个   可以一次创建对象。通过提供私有构造函数   您可以防止在除其他地方以外的任何地方创建类实例   这个班级。

深入了解本文,他们有使用Java私有构造函数的示例。

答案 2 :(得分:0)

新关键字确实使用构造函数,因为它在创建过程中用于初始化对象。如果您不提供任何构造函数,则编译器将插入默认的公共构造函数。如果提供构造函数,则不会。即使提供的构造函数是私有的。因此,如果仅提供一个私有构造函数,则无法从其范围之外初始化该类。

答案 3 :(得分:0)

如果类的唯一构造函数是私有的,则不应使用其他代码直接构造它。

(对于学步车,是的,您可以使用反射(如果可以解决Java安全问题),还可以使用JNI和嵌套类。)

该类可以为外部代码提供静态创建方法,以便以受控方式创建实例。

答案 4 :(得分:0)

您不能使用私有构造函数实例化一个类。私有构造函数可防止从外部创建对象。

在此示例中,我们无法在同一类之外创建Test1的对象。即,我们不能在main()方法上创建对象。

如果需要创建Test1的对象,则可以在类内部借助静态方法来实现它。 mkjh

对此进行了说明。

答案 5 :(得分:-2)

new关键字确实调用了类的构造函数。如果是私有的,则将无法从另一个类创建新对象。

您刚刚创建了Singleton