给出以下代码: public static class Helpers { private static Char[] myChars = new Char[] {'a', 'b'}; private static Int32 myCharsSize = myChars.Length; } 是否保证myChars将被初始化之前,我使用其长度分配给myCharsSize ?
我正在使用静态代码块来初始化我在registry中的一些控制器。 所以我的问题是,我可以保证,这个静态代码块将只会被绝对调用一次,当第一次加载类? 我知道我不能保证什么时候这个代码块将被调用,我猜它是什么时候Classloader第一次加载它。 我意识到我可以在静态代码块的类上同步,但我的猜测是这实际上是什么发生呢? 简单的代码示例是; class FooRegistry { static { //this code must only ever be called once addController(new FooControllerImpl()); } private static void addController(IFooController controller) { // … } } 或者我应该这样做; class FooRegistry { static { synchronized(FooRegistry.class) { addController(new FooControllerImpl()); } } private static void addController(IFooController controller) { // … } }