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

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

Java Multithreading
4 уровень , 8 лекция
Открыта

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

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

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

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

Вспомни, у статических переменных нет статического конструктора, но есть статический инициализатор – 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; }
}

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

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

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

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

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

Комментарии (88)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Максим Li Уровень 44
25 ноября 2025
😎
Сайфер Уровень 51
11 августа 2025
Пример

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;
    }
}
arsvasimov Уровень 51
7 июня 2025
;}
dlebedev Уровень 27
17 июля 2024
у статических переменных нет статического конструктора, но есть статический инициализатор – static-блок. Что б.?! откуда у переменных конструкторы и блоки кода?? Что курит автор статьи???
dlebedev Уровень 27
3 марта 2025
Давай посмотрим, что там написано, вместе: — Если для инициализации переменных объекта нужно выполнить сложный код (например, что-то загрузить из файла), мы можем сделать это в конструкторе. Статические переменные такой возможности лишены. Но т.к. потребность в этом осталась, в классы можно добавить статический блок или блоки, которые по сути своей эквивалентны вызову статических конструкторов. То есть, речь идет о статических блоках у класса для инициализации данных статических полей класса. Негодование мое вызвала формулировка, вводящая в заблуждение новичков.
Private Joker Уровень 36
12 июля 2024
Конечно возникает резонный вопрос "зачем?" Можно же сразу их инициализировать и все, чем пытаться использовать логику обычных классов. Но я так понимаю, это продолжение истории про период жизни объектов анонимных классов.
very junior java developer Уровень 51
9 мая 2023
Просто не понимаю почему бы вместо:

class Car
{
int policeNumber;
{
policeNumber = number;
}
}
не написать так:

class Car
{
int policeNumber = number;
}
??? )))
Alexander Minaev Уровень 27
23 июля 2023
тут скорее для наглядности, я считаю, что так можно, а если можно так, то можно и ваш вариант
Denis Rogov Уровень 1 Expert
22 февраля 2023

Ожидание
"Сейчас начну курс на джавараше, через полгодика уже буду искать работу. Учиться буду хоть структурированно, не буду психовать по всякой чепухе, потому что это ведь классный курс. Тут всё очень хорошо объясняется. Я читал истории успеха там тётка 2 часа в день, 5 дней в неделю уделяла JR и через 4 месяца приложение своё написала. Не буду забывать уделять время своим пробежкам по 10 км в день. Господи, кажется, я счастлив. Я буду АЙ-тишником, мать твою!!! Да, с*ка, да!!! С первой ЗП куплю себе классный комп. Эх...

Реальность
Да ёптвою мать, что за класс в котором метод в котором класс, да ещё и анонимный! Я без 2-х кальянов в день уже не вывожу морально. Выходя из дома, я молюсь, чтобы меня сбила мусоровозка. Хоспаде, дай мне сдохнуть пж
Iuliia Rumiantseva Уровень 45
24 февраля 2023
И я без кальянов не вывожу)))
Anonymous #3161756 Уровень 40
9 марта 2023
Реальность: студент JR: Здравствуйте, возьмите меня на должность Java Junior Developer, я знаю только базу Java, готов работать за бесплатно и много учиться! HR: Нам нужен junior с опытом бизнес разработки от 1 года, обязательное знание Maven/Kotlin/Spring, протоколов JSON, unit-тесты, умение написать сложные SQL запросы, английский не ниже intermediate, возраст не старше 19 лет и с оконченным высшим техническим образованием по соответствующему направлению, позитивным настроением, умеющим работать как самостоятельно, так и в команде. Преимущества нашей компании мы как одна большая семья, все члены команды нацелены на результат и он является самой главной целью жизни для каждого. Да и самое главное у нас есть печеньки!
Denis Rogov Уровень 1 Expert
9 марта 2023

Да и самое главное у нас есть печеньки!
Я думал, в конце будет "и у нас есть куллер с водой, БЕСПЛАТНО!" Студент JR: я умею делать заглушки для классов и ещё очень, очень, ну прям ОЧЕНЬ хорошо умею писать:

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Ra Уровень 35 Student
16 марта 2023
10 км ударов по коленным суставам в день. Надеюсь бегаете в амортизирующих кроссовках и по лесу.
Denis Rogov Уровень 1 Expert
16 марта 2023
ну. сейчас не в день, а 1-2 раза в неделю. Бегаю не по лесу, а по асфальту (да да, я знаю чашки на выход и всё такое). Но у меня хорошие кроссовки с классной амортизирующей пеной в подошве плюс немецкие ортопедические стельки для бега. Колени не болят. А бегал я за свою жизнь много и не по лесу. Наверное, когда то они выйдут из чата. Но я с расчётом на то, что я выйду из чата раньше, чем колени.
Камушек Уровень 36
5 декабря 2023
А я не вывожу без энергетика
7 марта 2024
😂😂😂😂😂точно
Dima Makarov Уровень 42
14 февраля 2023
— Очень. Лекции Ким, Риши, а особенно твои, Элли, были просто бесподобными. Чё блин ? Из этих лекций, самое полезно что вынес, это комментарии и ссылки на ролики в ютубе
FutureDev Уровень 42
17 ноября 2022

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
"Как ты уже знаешь, у анонимных внутренних классов не может быть конструктора." Нет, не знаю, этого в лекции не было
Вадим Уровень 41
13 августа 2022
Было на предыдущем уровне, предпоследний пример