整数数组静态初始化

2022-09-02 12:17:41

哪两个代码片段正确创建并初始化了 int 元素的静态数组?(选择两个。

一个。

static final int[] a = { 100,200 };

B.

static final int[] a;
static { a=new int[2]; a[0]=100; a[1]=200; }

C.

static final int[] a = new int[2]{ 100,200 };

D.

static final int[] a;
static void init() { a = new int[3]; a[0]=100; a[1]=200; }

答:A、B

在这里,即使D看起来是真的,任何人都可以让我知道为什么D是假的。


答案 1

正确的答案是 1 和 2(或带有您的符号的 A 和 B),也是正确的解决方案:

static final int[] a = new int[]{ 100,200 };

解决方案 D 不会自动初始化数组,因为类由运行时加载。它只是定义了一个静态方法(init),在使用数组字段之前必须调用它。


答案 2

D 定义了用于初始化的静态方法,但实际上并不调用它。因此,除非有人显式调用该方法,否则将保持未初始化状态。aainit

正如其他答案所指出的那样:D甚至不应该编译,因为它试图为变量赋值。我想这是一个更正确的解释。尽管如此,即使不是最终的D,如果没有额外的代码,仍然无法工作。finalaa

我假设D中的是拼写错误?其他三个都尝试创建长度为 2 的数组。new int[3]