如果将构造函数用于对象的初始化而不是对象的创建,那么对于具有私有构造函数的类,为什么不能在另一个类中创建对象?
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类的对象?
答案 0 :(得分:1)
如果看不到构造函数,则无法从外部调用它。
有一些用例:
java.lang.Math
)答案 1 :(得分:0)
如this article所述:
私有构造函数的使用是为单例类提供服务。一种 单例类是一种将对象创建数量限制为 一。使用私有构造函数,我们可以确保不超过一个 可以一次创建对象。通过提供私有构造函数 您可以防止在除其他地方以外的任何地方创建类实例 这个班级。
深入了解本文,他们有使用Java私有构造函数的示例。
答案 2 :(得分:0)
新关键字确实使用构造函数,因为它在创建过程中用于初始化对象。如果您不提供任何构造函数,则编译器将插入默认的公共构造函数。如果提供构造函数,则不会。即使提供的构造函数是私有的。因此,如果仅提供一个私有构造函数,则无法从其范围之外初始化该类。
答案 3 :(得分:0)
如果类的唯一构造函数是私有的,则不应使用其他代码直接构造它。
(对于学步车,是的,您可以使用反射(如果可以解决Java安全问题),还可以使用JNI和嵌套类。)
该类可以为外部代码提供静态创建方法,以便以受控方式创建实例。
答案 4 :(得分:0)
您不能使用私有构造函数实例化一个类。私有构造函数可防止从外部创建对象。
在此示例中,我们无法在同一类之外创建Test1的对象。即,我们不能在main()方法上创建对象。
如果需要创建Test1的对象,则可以在类内部借助静态方法来实现它。 mkjh
对此进行了说明。答案 5 :(得分:-2)
new
关键字确实调用了类的构造函数。如果是私有的,则将无法从另一个类创建新对象。
您刚刚创建了Singleton。