初始化java数组

初始化java数组,java,arrays,initialization,Java,Arrays,Initialization,最近,我发现数组可以按如下方式初始化: private static int[] _array = new int[4]; // An arbitrary amount of code { _array[0] = 10; _array[1] = 20; _array[2] = 30; _array[3] = 40; } 这种初始化形式叫什么?它的局限性是什么?这是使用的实例成员初始化,它看起来很像静态初始化,在该块前面加上单词static 它的限制将与任何

最近,我发现数组可以按如下方式初始化:

private static int[] _array = new int[4];

// An arbitrary amount of code

{ 
    _array[0] = 10;
    _array[1] = 20;
    _array[2] = 30;
    _array[3] = 40;
}

这种初始化形式叫什么?它的局限性是什么?

这是使用的实例成员初始化,它看起来很像静态初始化,在该块前面加上单词
static


它的限制将与任何构造函数的限制相匹配,因为Java编译器将初始值设定项块复制到每个构造函数中。因此,此方法可用于在多个构造函数之间共享一个代码块。

它是初始化块,涉及:

Java编译器复制初始值设定项 块插入每个构造函数。 因此,可以使用这种方法 在用户之间共享一段代码 多个构造函数


我昨天在类似的帖子中回答过,同样值得注意的是,初始化静态变量引用的数组似乎是一种非常危险的方式。每次创建新实例时,数组以前的内容都会丢失,并重新初始化为一组新值。如果需要,那么
\u array
可能应该是一个实例成员。@请原谅我的好奇,但是“成员初始化”和“静态初始化”之间的区别只是在新实例的每个构造函数中调用成员初始化,而静态初始化只调用一次?@T.K.:从语义上讲,每次类装入器装入类时,静态初始化器都会运行一次。在大多数情况下,这意味着只有一次。@T.K:成员初始化是每个实例的,而静态初始化是每个类的;因此,每次创建新实例时都会调用成员初始化,而只有在第一次引用该类时才会调用静态初始化。