Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我们可以将构造函数声明为静态以生成一个单例类吗?JAVA_Java_Oop_Singleton - Fatal编程技术网

我们可以将构造函数声明为静态以生成一个单例类吗?JAVA

我们可以将构造函数声明为静态以生成一个单例类吗?JAVA,java,oop,singleton,Java,Oop,Singleton,在这里,虽然我们可以创建不同的名称,但它不应该引用相同的内存位置吗?类似于一次叫同一个人的名字,一次叫他的昵称?它仍然是一个单例类吗?您不能有一个静态构造函数,因为它的工作是初始化一个this实例对象 在Scala中,您可以编写 class SomeClass{ static SomeClass(){ } } 在类的单例字段和静态字段之间创建一些内容 在Java中定义单例的最简单方法是使用枚举 对SomeClass.INSTANCE的所有引用都将是同一个实例。这是创建和发布单例

在这里,虽然我们可以创建不同的名称,但它不应该引用相同的内存位置吗?类似于一次叫同一个人的名字,一次叫他的昵称?它仍然是一个单例类吗?

您不能有一个静态构造函数,因为它的工作是初始化一个this实例对象

在Scala中,您可以编写

class SomeClass{
    static SomeClass(){
    }
}
在类的单例字段和静态字段之间创建一些内容

在Java中定义单例的最简单方法是使用枚举


对SomeClass.INSTANCE的所有引用都将是同一个实例。

这是创建和发布单例的正确方法,假设您不想使用像枚举这样的隐式单例:


这个编译吗?不…使构造函数私有化静态构造函数没有意义。为什么这会使这个物体成为一个单体呢?不,我知道问题就在那里。我正在考虑另一种方法。静态构造函数初始值设定项看起来像这样的静态{/*do stuff*/}
object SomeClass {

}
enum SomeClass {
    INSTANCE;
}
public SomeClass
{
    private static class SingletonHolder
    {
        public static final SomeClass INSTANCE = new SomeClass();
    }

    public static SomeClass getInstance()
    {
        return SingletonHolder.INSTANCE;
    }

    private SomeClass()
    {
    }
}