代码之家  ›  专栏  ›  技术社区  ›  Eugene Kartoyev

当我使用静态最终对象时,是否会反复调用该对象的init方法?[副本]

  •  -1
  • Eugene Kartoyev  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我有一个库,在这个库中,整个应用程序只需要一个配置。 我通过一个助手类中的公共静态最终引用调用该库中的一个方法到库的生成器。

    简而言之,它看起来是这样的:

    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);
    

    这是否意味着每次调用静态渲染器时,它都会一次又一次地通过添加和构建方法的所有过程?

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Sami Tahri    6 年前

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

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

    静态类:

    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