当我使用该对象时,是否会一次又一次地调用静态最终对象的 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
我有一个库,在整个应用程序中我只需要一个配置。 我通过 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