静态类是一个单例吗?
可能重复:
静态类和单例模式之间的区别?
我在想,
像Java的Math类那样,所有方法都是静态的类会被视为单例吗? 还是单身人士必须有一个实例,例如: Math.getInstance().abs(...
)才有资格成为单身人士?
谢谢
在类中使用静态方法并不能将它定义为Singleton
,因为如果你有一个public constructor
,那么你仍然可以创建该类的多个实例。
对于有资格成为Singleton
的类,它应该具有private constructor
,以便它不能从类外部实例化,并且有一个static factory
,每次调用时都返回same instance
。
如果你的意思是static class
,那么首先,你不能让你的top-level
类成为static
类。 你只能有static nested class
,在这种情况下你不需要创建该类的任何实例,但是你可以创建多个实例,因此它不是Singleton
。
另外,你提到的类java.lang.Math
不是一个静态类。 你应该看到那个文件。
Java中的静态类只是不是内部类的嵌套类。 (例如,它们不像C#中的静态类。)它们仍然可以有实例方法,状态等 - 并且可以有多个实例。
java.lang.Math
不是一个静态类。
不,从来没有实例的课程不是单身人士。 最重要的区别是单例可以实现一个接口(甚至可以从一个抽象类派生),而如果你从不创建一个类的实例,任何实例方法都是毫无意义的。
应用Singleton Pattern的类在JVM上随时有一个或者没有实例。 这就是为什么它被称为单吨。 拥有static
non-static
成员与单身或非单身没有关系。