最近,我发现一个数组可以初始化如下:初始化Java数组
private static int[] _array = new int[4];
// An arbitrary amount of code
{
_array[0] = 10;
_array[1] = 20;
_array[2] = 30;
_array[3] = 40;
}
什么叫这种形式的初始化?它有什么限制?
最近,我发现一个数组可以初始化如下:初始化Java数组
private static int[] _array = new int[4];
// An arbitrary amount of code
{
_array[0] = 10;
_array[1] = 20;
_array[2] = 30;
_array[3] = 40;
}
什么叫这种形式的初始化?它有什么限制?
这是使用initializer block进行实例成员初始化,它看起来很像静态初始化,它将以static
这个词作为前缀。
由于Java编译器将初始化块复制到每个构造函数中,因此它的限制将与任何构造函数的限制相匹配。因此,这种方法可以用来在多个构造函数之间共享一段代码。
另外值得一提的是,这似乎是一个非常危险方法初始化由** static **变量引用的数组。每次创建新实例时,数组的先前内容都将丢失,并重新初始化为一组新值。如果这是可取的,那么'_array'应该可能是一个实例成员。 – 2011-04-05 21:23:58
@Mark Pardon我的好奇心,但是“成员初始化”和“静态初始化”之间的区别仅仅是在每个构造函数中为每个新实例调用成员初始化,而静态初始化只被调用过一次? – 2011-04-05 21:31:11
@ T.K。:从语义上讲,类加载器每次加载类时都会运行一次静态初始化程序。在大多数情况下,这只意味着一次。 – 2011-04-05 21:32:41