Немного про примитивы и значение по умолчанию
Тип int
- примитивный тип данных. Переменная этого типа не ссылается на какой-то класс, а просто хранит в себе какое-либо значение. И когда вы не даёте никакого значения примитиву, то ему присваивается значение по умолчанию (для типа int
это 0
).
То эта запись
private static int CARS_COUNT;
даст тот же результат, что и эта:
private static int CARS_COUNT = 0;
А теперь разберём ваш пример
private static int CARS_COUNT; //Переменная имеет значение по умолчанию, т.е 0
static {
CARS_COUNT = 0; //Вы присваиваете переменной то же самое значение, какое у неё и было
}
В данном случае статический инициализатор ничего не меняет. Но вы могли сделать так, как уже говорил @ЮрийСПб♦
. Вы же могли в статическом инициализаторе присвоить переменной другое значение (не ноль):
static {
CARS_COUNT = 11;
}
тогда бы переменная имела бы значение 11
, а не 0
.
Но если статической переменной можно сразу дать нужное значение, то зачем конструкция static{}
?
Представьте, что у вас не статическая переменная типа int
, а статический массив. Да, вы конечно можете сделать так:
static int[] array = new int[]{1, 2, 3, 4, 5, 6, 7};
Но если вам нужно заполнить массив не заранее известными числами, а числами, которые возвращают какие-то методы? А если в массиве 100
элементов и их надо заполнить циклом? В таком случае вам поможет статический инициализатор. Вот пример:
int[] array = new int[100];
static{
int j = 0;
for(int i = 0; i < array.length; i++){
j++;
array[i] = j;
}
}
Можно посмотреть ответ на этот вопрос, если хотите узнать больше о конструкции static{}