静态方法初始化程序在静态方法执行后被调用

时间:2015-11-19 14:43:34

标签: java static static-methods static-members jls

我有一个只有静态成员的类,设计如下:

public class Clazz {

    public static final Foo foo = FooFactory.createFoo();

    private static Bar bar;

    public static void prepare() {
        bar = new Bar(foo);
    }
}

调用Clazz.prepare()时,我可以看到foo在bar初始化时为null。据我所知,应该在调用类的任何静态方法之前调用静态初始化程序。因此,调用prepare()时应该已经初始化了foo。 我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

FooFactory.createFoo()必须返回null

答案 1 :(得分:-1)

实际上,Foo的初始化程序也调用了Clazz.prepare()。这就是原因。感谢@biziclop的想法。