JavaRush/Курсы/Java Multithreading/Конструкторы/переменные анонимных иннер классов, final

Конструкторы/переменные анонимных иннер классов, final

Открыта

— Привет, Амиго!

Как ты уже знаешь, у анонимных внутренних классов не может быть конструктора.

— Ага. Это очень неудобно. Конструктор – это очень нужная вещь.

— Как говорится, если нельзя, но очень хочется, то можно.

Вспомни, у статических переменных нет статического конструктора, но есть статический инициализатор – static-блок.

— Ага, я помню.

— Вот точно такой же инициализатор, только не статик, есть у анонимных внутренних классов:

Пример
class Car {
 public ArrayList<Car> createPoliceCars(int count) { ArrayList<Car> result = new ArrayList<Car>(); for(int i=0; i<count; i++) { final int number = i; result.add(new Car() { int policeNumber; { policeNumber = number; } }); } return result; }
}

В этот раз я выделила красным цветом код анонимного внутреннего класса, а фиолетовым – его инициализатор – или, фактически, конструктор. Тело «конструктора» есть, а заголовка метода – нет:

Ожидание Реальность
class Car { int policeNumber;
 Car(){ policeNumber = number; }
}
class Car { int policeNumber;
{ policeNumber = number; }
}

Ты можешь объявлять переменные внутри такого класса и инициализировать их внутри инициализатора.

— Отлично, теперь ограничений значительно меньше.

— На этом мы наше знакомство с внутренними классами и закончим. Надеюсь, тебе понравилось.

— Очень. Лекции Ким, Риши, а особенно твои, Элли, были просто бесподобными.

— Льстец! Продолжай…

Комментарии (90)
  • популярные
  • новые
  • старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Максим Li Backend Developer
25 ноября 2025, 23:49
😎
Сайфер
Уровень 51
11 августа 2025, 12:45
Пример
class Car {
    public ArrayList<Car> createPoliceCars(int count) {
        ArrayList<Car> result = new ArrayList<Car>();
        for (int i = 0; i < count; i++) {
            final int number = i;
            result.add(new Car() {
                int policeNumber;

                {
                    policeNumber = number;
                }
            });
        }
        return result;
    }
}
HISMAN
Уровень 46
1 марта, 20:30
спасибо
Никита QAQA Automation Engineer в ОТТ Триколор
9 марта, 06:47
Не понимаю в чем трудность у авторов сделать форматирование кода в лекции для читаемости.
arsvasimov Java Developer в Phractal Client
7 июня 2025, 13:06
;}
dlebedevSoftware Developer в Implecs
17 июля 2024, 18:51
у статических переменных нет статического конструктора, но есть статический инициализатор – static-блок. Что б.?! откуда у переменных конструкторы и блоки кода?? Что курит автор статьи???
safelogj Android Developer
27 июля 2024, 20:41
dlebedevSoftware Developer в Implecs
3 марта 2025, 06:00
Давай посмотрим, что там написано, вместе: — Если для инициализации переменных объекта нужно выполнить сложный код (например, что-то загрузить из файла), мы можем сделать это в конструкторе. Статические переменные такой возможности лишены. Но т.к. потребность в этом осталась, в классы можно добавить статический блок или блоки, которые по сути своей эквивалентны вызову статических конструкторов. То есть, речь идет о статических блоках у класса для инициализации данных статических полей класса. Негодование мое вызвала формулировка, вводящая в заблуждение новичков.
Private Joker
Уровень 36
12 июля 2024, 14:18
Конечно возникает резонный вопрос "зачем?" Можно же сразу их инициализировать и все, чем пытаться использовать логику обычных классов. Но я так понимаю, это продолжение истории про период жизни объектов анонимных классов.
9 мая 2023, 10:58
Просто не понимаю почему бы вместо:
class Car
{
int policeNumber;
{
policeNumber = number;
}
}
не написать так:
class Car
{
int policeNumber = number;
}
??? )))
Alexander Minaev
Уровень 27
23 июля 2023, 12:38
тут скорее для наглядности, я считаю, что так можно, а если можно так, то можно и ваш вариант
Denis Rogov
Уровень 1
Expert
22 февраля 2023, 22:58
Ожидание
"Сейчас начну курс на джавараше, через полгодика уже буду искать работу. Учиться буду хоть структурированно, не буду психовать по всякой чепухе, потому что это ведь классный курс. Тут всё очень хорошо объясняется. Я читал истории успеха там тётка 2 часа в день, 5 дней в неделю уделяла JR и через 4 месяца приложение своё написала. Не буду забывать уделять время своим пробежкам по 10 км в день. Господи, кажется, я счастлив. Я буду АЙ-тишником, мать твою!!! Да, с*ка, да!!! С первой ЗП куплю себе классный комп. Эх...
Реальность
Да ёптвою мать, что за класс в котором метод в котором класс, да ещё и анонимный! Я без 2-х кальянов в день уже не вывожу морально. Выходя из дома, я молюсь, чтобы меня сбила мусоровозка. Хоспаде, дай мне сдохнуть пж
Iuliia Rumiantseva
Уровень 45
24 февраля 2023, 15:40
И я без кальянов не вывожу)))
Anonymous #3161756
Уровень 40
9 марта 2023, 08:01
Реальность: студент JR: Здравствуйте, возьмите меня на должность Java Junior Developer, я знаю только базу Java, готов работать за бесплатно и много учиться! HR: Нам нужен junior с опытом бизнес разработки от 1 года, обязательное знание Maven/Kotlin/Spring, протоколов JSON, unit-тесты, умение написать сложные SQL запросы, английский не ниже intermediate, возраст не старше 19 лет и с оконченным высшим техническим образованием по соответствующему направлению, позитивным настроением, умеющим работать как самостоятельно, так и в команде. Преимущества нашей компании мы как одна большая семья, все члены команды нацелены на результат и он является самой главной целью жизни для каждого. Да и самое главное у нас есть печеньки!
Denis Rogov
Уровень 1
Expert
9 марта 2023, 22:36
Да и самое главное у нас есть печеньки!
Я думал, в конце будет "и у нас есть куллер с водой, БЕСПЛАТНО!" Студент JR: я умею делать заглушки для классов и ещё очень, очень, ну прям ОЧЕНЬ хорошо умею писать:
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Ra
Уровень 19
Student
16 марта 2023, 06:40
10 км ударов по коленным суставам в день. Надеюсь бегаете в амортизирующих кроссовках и по лесу.
Denis Rogov
Уровень 1
Expert
16 марта 2023, 06:45
ну. сейчас не в день, а 1-2 раза в неделю. Бегаю не по лесу, а по асфальту (да да, я знаю чашки на выход и всё такое). Но у меня хорошие кроссовки с классной амортизирующей пеной в подошве плюс немецкие ортопедические стельки для бега. Колени не болят. А бегал я за свою жизнь много и не по лесу. Наверное, когда то они выйдут из чата. Но я с расчётом на то, что я выйду из чата раньше, чем колени.
КамушекJava Developer в Иннотех
5 декабря 2023, 13:04
А я не вывожу без энергетика
7 марта 2024, 15:14
😂😂😂😂😂точно
Dima Makarov
Уровень 42
14 февраля 2023, 15:17
— Очень. Лекции Ким, Риши, а особенно твои, Элли, были просто бесподобными. Чё блин ? Из этих лекций, самое полезно что вынес, это комментарии и ссылки на ролики в ютубе
FutureDevJava Student в Home Corporation ®
17 ноября 2022, 19:08
class Car {
    public ArrayList<Car> createPoliceCars(int count) {
        ArrayList<Car> result = new ArrayList<Car>();

        for (int i = 0; i < count; i++) {
            final int number = i;
            result.add(new Car() {
                int policeNumber;

                {
                    policeNumber = number;
                }
            });
        }
        return result;
    }
}
Майкл Мэдсен
Уровень 51
8 июля 2022, 06:42
"Как ты уже знаешь, у анонимных внутренних классов не может быть конструктора." Нет, не знаю, этого в лекции не было
Вадим
Уровень 41
13 августа 2022, 14:56
Было на предыдущем уровне, предпоследний пример