public static class Cat {
public static int count = 0;
{
count = count + 1;
}
}
Объясните пожалуйста как данный код
{
count = count + 1;
}
Связан с создание объектов Cat? Почему когда я создаю кота Cat cat1 = new Cat(), то срабатывает count = count + 1 или count ++;?Андрей
29 уровень
Как это работает
Обсуждается
Комментарии (6)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Dima Kurilchik
6 апреля 2018, 13:57
Нестатические блоки инициализации вызываются непосредственно перед вызовом конструктора класса. Могут служить для устранения дублирования кода в нескольких конструкторах.
И, как уже упоминалось Ярославом, данные блоки также могут использоваться в анонимных классах.
0
Стас Пасинков Software Developer в Zipy Master
5 апреля 2018, 21:24
а где вы взяли такое решение, если не секрет?)
лично я инкрементил счетчик котов в конструкторе просто :)
0
Ярослав Java Developer Master
5 апреля 2018, 20:49
Потому что { } - это инициализатор, он выполняется при создании каждого объекта на подобии конструктора. Я точно не помню, для чего он вообще нужен, то ли где-то в локальных классах его можно использовать, то ли в анонимных, так как там нельзя переопределять конструкторы, но, в целом, его редко можно увидеть. Чаще используется его аналог со словом static. Тогда блок выполняется всего один раз, а не при создании каждого объекта, и это позволяет как-то проинициализировать класс, если он в этом нуждается.
0
Стас Пасинков Software Developer в Zipy Master
5 апреля 2018, 21:22
static {...} выполнится только один раз, а не при каждом создании кота :)
0
Ярослав Java Developer Master
6 апреля 2018, 12:37
А я не так описал?)
0
Стас Пасинков Software Developer в Zipy Master
7 апреля 2018, 00:34
хм. странно) вчера показалось, что не так :)
тогда извиняюсь :)
0