当我使用该对象时,是否会一次又一次地调用静态最终对象的 init 方法?

Are the init methods of a static final object called again and again when I use that object?

我有一个库,在整个应用程序中我只需要一个配置。 我通过 Helper class 中的 public static final 引用来调用该库中的一个方法到库的构建器。

在示意图上,它看起来像这样:

public class Helper{
       private static final Pattern a = ... ;
       private static final Pattern b = ... ;
       ....
       public static final Library.Renderer RENDERER = Library.getBuilder().
                        .add(a)      // setting the configuration 
                        .add(b)      // of the renderer
                        ...
                        .build();
}

而且,我像这样从其他地方调用该库中的方法

 String processedText = Helper.RENDERER.render(rawText);

是不是说我每次调用静态RENDERER,都把方法的添加和构建过程一遍又一遍地经过了?

注意:这与静态变量无关。它是关于静态对象初始化中包含的方法。所以,问题是 static final RENDERER = .... 是指添加和构建过程,还是指添加和构建过程的最终结果。

不,只调用一次。 测试文件:

public static void main(String[] args) {
    int verify = Static.var;
    int verify2 = Static.var;
    System.out.println("verify:"+verify);
    System.out.println("Verify2:"+verify2);
}

静态class:

public class Static {

    public static int var = returnCount();

    public static int count = 0;
    public static int returnCount() {
        count = count + 1;
        return count;
   }
}

结果:

verify:1 Verify2:1