Статическая инициализация массива

Какие два фрагмента кода правильно создают и инициализируют статический массив int элементы? (Выберите два.)

а.

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

В.

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

С.

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

Д.

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

Ответ: A, B

здесь даже D кажется правдой, может ли кто-нибудь сообщить мне, почему D является ложным.

Ответы

Ответ 1

Правильные ответы: 1 и 2 (или A и B с вашими обозначениями), а также правильное решение:

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

Решение D не инициализирует массив автоматически, так как класс загружается средой выполнения. Он просто определяет статический метод (init), который вы должны вызывать перед использованием поля массива.

Ответ 2

D определяет статический метод инициализации a, но на самом деле не вызывает его. Таким образом, a остается неинициализированным, если только кто-то явно не вызывает метод init.

Как указывали другие ответы: D не должен компилироваться, потому что он пытается присвоить значение переменной final a. Думаю, это гораздо более правильное объяснение. Тем не менее, даже если a не был окончательным, D все равно не работал бы без дополнительного кода.

Я предполагаю, что new int[3] в D - опечатка? Остальные трое пытаются создать массив длиной 2.

Ответ 3

D (4) неверно, потому что a) a является окончательным, и вы не можете назначить его в init; б) нет гарантии, что init будет называться; c) init не устанавливает третий элемент:

Ответ 4

для фрагмента C Вы не можете указывать размеры (размер) при инициализации для фрагмента D вы должны инициализировать конечную переменную. Его нельзя инициализировать позже.

Ответ 5

конечные переменные должны быть инициализированы до завершения вызова конструктора. Поскольку "static void init()" - это метод, и он не будет выполняться до конструктора, конечные переменные не будут инициализированы. Следовательно, это ошибка времени компиляции.