integer array static initialization

天大地大妈咪最大 提交于 2020-01-10 21:51:34

问题


Which two code fragments correctly create and initialize a static array of int elements? (Choose two.)

A.

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; }

Answer: A, B

here even D seems true, can anyone let me know why D is false.


回答1:


The correct answers are 1 and 2 (or A and B with your notation), and an also correct solution would be:

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

Solution D doesn't initalize the array automatically, as the class gets loaded by the runtime. It just defines a static method (init), which you have to call before using the array field.




回答2:


D defines a static method for initialising a but does not actually call it. Thus, a remains uninitialised unless someone explicitly calls the init method.

As other answers have pointed out: D shouldn't even compile because it attempts to assign a value to the final variable a. I guess that's a much more correct explanation. Nevertheless, even if a was not final D would still not work without extra code.

I assume the new int[3] in D is a typo? The other three all attempt to create an array of length 2.




回答3:


D (4) is false, because a) a is final and you cannot assign it in init; b) there is no guarantee that init will be called; c) init doesn't set the third element;




回答4:


for snippet C You cannot give dimensions ( Size ) while initializing for snippet D you should initialize final variable. It cannot be initialized later.




回答5:


final variables should be initialized before constructor call completes. Since "static void init()" is a method & it will not run before constructor, final variables won't be initialized. Hence it is an compile time error.



来源:https://stackoverflow.com/questions/4449935/integer-array-static-initialization

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!