整数数组静态初始化

use*_*108 17 java arrays static

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

一个.

static final int[] a = { 100,200 };
Run Code Online (Sandbox Code Playgroud)

B.

static final int[] a;
static { a=new int[2]; a[0]=100; a[1]=200; }
Run Code Online (Sandbox Code Playgroud)

C.

static final int[] a = new int[2]{ 100,200 };
Run Code Online (Sandbox Code Playgroud)

D.

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

答案:A,B

这里甚至D似乎都是真的,任何人都可以让我知道为什么D是假的.

buc*_*buc 25

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

static final int[] a = new int[]{ 100,200 };
Run Code Online (Sandbox Code Playgroud)

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


Cam*_*ner 6

D定义了一个初始化的静态方法,a但实际上并没有调用它.因此,a除非有人明确调用该init方法,否则仍未初始化.

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

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