繁体   English   中英

Java单一实例意味着

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM