Java 静态实例变量引用类的实例

Java 静态实例变量引用类的实例,java,reference,Java,Reference,我可以让类的静态字段保留对自身实例的引用吗?如果是这样,它是否会在jvm中保持活动状态,而没有其他人保留引用 public class StatTest { private static StatTest statTest; public static StatTest getStatTest () { if (statTest== null) { statTest= new StatTest (); statTe

我可以让类的静态字段保留对自身实例的引用吗?如果是这样,它是否会在jvm中保持活动状态,而没有其他人保留引用

public class StatTest {
    private static StatTest statTest;

    public static StatTest getStatTest () {
        if (statTest== null) {
            statTest= new StatTest ();
            statTest.init();
        }
        return statTest;
    }

    private StatTest() { }
}

这是创建类的单例的一种方法

所以要回答你的问题:

  • 是的,这是可能的
  • getStatTest()
    方法的所有引用都将返回该实例

当对单例使用此方法时,该方法通常被称为
getInstance()
=)

恭喜。你重新创造了单身汉

是的,这就是设计模式的概念

它会在jvm中保持活动状态而没有其他人保留引用吗

public class StatTest {
    private static StatTest statTest;

    public static StatTest getStatTest () {
        if (statTest== null) {
            statTest= new StatTest ();
            statTest.init();
        }
        return statTest;
    }

    private StatTest() { }
}

是的,只要类本身不符合垃圾收集的条件(只有在使用自定义类加载器时才会发生垃圾收集)。

这是实现单例模式的一种方法。请注意,这不是线程安全的(即,如果从多个线程调用
StatTest.getStatTest()
,则可能会出现问题)。要比较不同的单例实现(包括一些线程安全的实现),请检查,这是我不久前写的一个答案。感谢您提供的所有答案!我现在意识到这是一个非常有名的模式。我以前就知道辛格尔顿这个名字,但我从来没有读过。现在很容易找到关于如何进行的信息。非常感谢!