5

一篇关于双重检查锁定习语的文章中,我发现了这句话:

一种在没有同步的情况下按预期工作的延迟初始化的特殊情况是静态单例。当初始化的对象是一个没有其他方法或字段的类的静态字段时,JVM有效地自动执行惰性初始化。

为什么强调的部分很重要?如果有其他方法或字段,为什么它不起作用?

(文章已经有10多年了。信息还相关吗?)

4

1 回答 1

4

这可能意味着,如果一个类没有其他方法或字段,那么您只能为单例访问它,因此单例仅在需要时创建。否则,例如

class Foo 
{
    public static final Foo foo = new Foo();

    public static int x() { return 0; }
}

class AnotherClass
{
    void test() 
    {
        print(Foo.x());
    }
}

在这里,foo被实例化了,尽管它从未被要求过。

但是有私有静态方法/字段是可以的,这样其他人就不会意外触发类初始化。

于 2013-02-02T00:43:23.843 回答