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.
The correct answers are 1 and 2 (or A and B with your notation), and an also correct solution would be:
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.
for snippet C You cannot give dimensions ( Size ) while initializing for snippet D you should initialize final variable. It cannot be initialized later.
D defines a static method for initialising
a
but does not actually call it. Thus,a
remains uninitialised unless someone explicitly calls theinit
method.As other answers have pointed out: D shouldn't even compile because it attempts to assign a value to the
final
variablea
. I guess that's a much more correct explanation. Nevertheless, even ifa
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.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.
D (4) is false, because a)
a
is final and you cannot assign it ininit
; b) there is no guarantee thatinit
will be called; c)init
doesn't set the third element;