[英]Java single instance means
“在Java中,Singleton模式将确保在Java中仅创建一个类的实例”。
我在这里无法理解单一实例的意思。
例如 :
A a = new A();
这是什么? 它是对象还是实例? 如果是is实例,是否表示我们不能像下面这样。
A b = new A()
即另一个实例“ b”
任何图表示例都会对我有所帮助。
谢谢
在您的示例中, a
是对A
实例的引用,该实例是通过调用new A()
创建的。
您可以很好地做到A b = new A();
,这意味着现在您周围有两个A
实例。
对象的含义与实例相同。
a
引用了new A()
创建的新创建的对象。 但是,这与单例模式无关。 总是如此。
在单例模式中,您将找到一种确保new A()
在程序中仅被调用一次的方法。 完成此操作的典型方法是将A
的构造函数设为私有,然后从A
内创建实例(因此,这是唯一允许调用私有构造函数的类)。
public class A {
public static final A instance = new A();
private A() {}
}
但是,这种方法确实有一些极端的情况:您可以通过反射和序列化(如果A
可序列化)来创建额外的实例。 要真正实现单例,Java中最好的方法是使用枚举:
public enum A {
INSTANCE;
// fields, methods etc go here
}
JVM将确保该过程中仅存在一个A.INSTANCE
。
这里的'a'
是指向创建的'new A()'
引用。一旦创建了一个对象,您就无法在使用单例模式时创建其他对象。使用A b = new A()
是错误的。
对象是实例。 类的实例(=一个案例或一个特定的例子),它们是用编程语言编写的一些东西,它们定义了对象本身的语义。 使用单例时,您将使用私有构造函数定义一个类,这意味着只有该类的实例才能调用该构造函数,因此只有该类的实例才能创建该类的其他实例。 下一步是编写一个说的方法。 “您要引用该对象的实例吗?好吧,如果有人以前问过我,我会先创建它,然后再交给您,或者我给您一个已经创建的实例”。
因此,现在您正在问“等等,如果我需要该类的实例来获取该类的实例,我如何在没有该类的实例的情况下获取该类的实例?!?”。 那里是一个复杂问题的简单答案:使用静态方法和字段
静态代码不属于该类的任何实例,静态变量和静态方法代码存储在地址空间的其他区域中,因此您可以在拥有单例类的实例之前使用它
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.