整数数组静态初始化

时间:2010-12-15 12:38:04

标签: java arrays static

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

一个。

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

B中。

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

下进行。

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是假的。

5 个答案:

答案 0 :(得分:23)

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

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

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

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:3)

D(4)是假的,因为a) a是最终的,你不能在init 中分配它; b)无法保证init将被呼叫; c)init未设置第三个元素;

答案 3 :(得分:1)

for snippet C初始化时无法给出尺寸(Size) 对于代码段D,您应该初始化最终变量。它无法在以后初始化。

答案 4 :(得分:0)

应该在构造函数调用完成之前初始化最终变量。因为“static void init()”是一种方法&它不会在构造函数之前运行,最终变量也不会被初始化。因此,这是一个编译时错误。