最好将Singleton的实例声明为staticstatic final

请参见以下示例:

static版本

public class Singleton {

    private static Singleton instance = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
        return instance;
    }

}

static final版本
public class Singleton {

    private static final Singleton INSTANCE = new Singleton();

    private Singleton() {
    }

    public static Singleton getInstance() {
        return INSTANCE;
    }

}

最佳答案

在您的特定情况下,完全没有区别。您的第二个已经是effectively final



撇开下面的实现不是线程安全的事实,只是表明了final的不同。

如果实例的延迟初始化,您可能会感到与众不同。看起来很懒惰的初始化。

public class Singleton {

    private static Singleton INSTANCE; /error

    private Singleton() {
    }

    public static Singleton getInstance() {
      if (INSTANCE ==null) {
         INSTANCE = new Singleton(); //error
      }
        return INSTANCE;
    }

}

关于java - 单例模式: static or static final?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32371219/

10-09 06:18
查看更多