Java singleton的目的以及我们为什么需要私有构造函数

Java singleton的目的以及我们为什么需要私有构造函数,java,singleton,Java,Singleton,我是JAVA的新手 当我读到单例模式时,它需要先运行一个实例 诸如此类: public class Singleton { private static final Singleton instance = new Singleton(); private Singleton(){} public static Singleton getInstance(){ return instance; } } public class Singl

我是JAVA的新手

当我读到单例模式时,它需要先运行一个实例

诸如此类:

public class Singleton {

    private static final Singleton instance = new Singleton();

    private Singleton(){}

    public static Singleton getInstance(){
        return instance;
    }

}
public class Singleton {


    public Singleton(){}
    //methods,....

}
但我也写了这样的东西:

public class Singleton {

    private static final Singleton instance = new Singleton();

    private Singleton(){}

    public static Singleton getInstance(){
        return instance;
    }

}
public class Singleton {


    public Singleton(){}
    //methods,....

}
所以我有一些问题:

1) 为什么我们需要singleton中的实例?目的是什么? 2) 为什么singleton中的构造函数是私有的?我们如何初始化该类的输入

我知道我的问题很基本,我听到了很多

但是请帮我解释一下


感谢并致以最诚挚的问候

不要在单例中使用公共构造函数。 单例的意义在于,您只有该类的一个实例。所以,如果你有一个公共构造函数,你不能保证只有一个实例。 您有一个私有构造函数,它在该类中只被调用一次,所以您只有一个实例。您可以通过getInstance方法提供该实例。

1)Singleton模式是一种设计模式,在程序的整个生命周期中,您只有一个实例,即一个对象。因此,将实例设为静态并初始化一次,以便程序中只有一个对象

2) 构造函数必须是私有的,这样您就不会像自己希望的那样初始化对象。也就是说,当构造函数是私有的时,您不能调用
new Singleton()
,因为您不能从类外部访问构造函数,因为它是私有的。您可以通过创建一个静态方法来初始化输入,该方法接受一些参数,并在构造唯一实例时创建它们

例如,考虑下面的

public class Singleton {

    private static Singleton instance;

    private String a;
    private String b;

    private Singleton(){}

    private Singleton(String a, String b) {
         this.a = a;
         this.b = b;
    }

    public static Singleton getInstance(String a, String b){
        if (instance == null)
            instance = new Singleton(a, b);
        return instance;
    }

}

希望这有帮助

听起来你基本上需要阅读更多关于单例模式的内容。您的第二个类根本不是单例。
当我阅读有关单例模式的内容时,它需要先运行一个实例。
您读完有关单例的内容了吗?您的问题通常会在教程/课程中得到解答,因为它们是单例模式背后的原理。根据定义,单例的可能副本只有一个实例。你在问什么?