哪两个代码片段正确创建并初始化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是假的。
答案 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()”是一种方法&它不会在构造函数之前运行,最终变量也不会被初始化。因此,这是一个编译时错误。