@anya_hacker

Почему для инициализации массива нужен статический блок в Java?

При инициализации статических элементов в Java я могу сразу их создать с каким-то значением:
public class WhyDude {
	static int x = 5;
}

Однако, с массивом так не получится:
public class WhyDude {
	static int x = 5;
	
	static int[] arr = new int[3];
	arr[0] = 1;
	arr[1] = 2;
	arr[2] = 3;
}

Syntax error on token ";", { expected after this token

Но при использовании статического блока инициализации всё работает корректно:
public class WhyDude {
	
	static int x = 5;
	
	static int[] arr = new int[3];
	
	static {
		arr[0] = 1;
		arr[1] = 2;
		arr[2] = 3;
	}

	public static void main(String[] args) {
		for (int i=0; i<arr.length; i++) {
			System.out.println(arr[i]);
		}
	}

}

Возникает вопрос: почему переменные примитивного типа мы модем инициализировать без использования статического блока инициализации, а при массиве из элементов примитивного типа уже не обойтись без статического блока?
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Java
Седой и строгий
Потому что в теле класса могут содержаться только объявления.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
xez
@xez Куратор тега Java
TL Junior Roo
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы