JavaRush /Курсы /Java Core /Порядок загрузки классов, статические данные…

Порядок загрузки классов, статические данные…

Java Core
5 уровень, 7 лекция
Открыта

— Привет, Амиго! Слышала, Риша рассказал тебе новую и очень интересную тему?!

— Да, Ким.

— Моя тема будет не менее интересной. Я хочу рассказать тебе о загрузке в память классов.

Классы в Java – это файлы на диске, содержащие байт-код – скомпилированный Java-код.

— Да, я помню.

— Java-машина не загружает их без необходимости. Как только где-то в коде происходит обращение к классу, Java-машина проверяет – загружен ли он. И если нет, то загружает и инициализирует его.

Инициализация класса – это присваивание значений всех его статических переменных и вызов всех статических блоков.

— Похоже на вызов конструктора у объекта. А что такое статический блок?

— Если для инициализации переменных объекта нужно выполнить сложный код (например, что-то загрузить из файла), мы можем сделать это в конструкторе. Статические переменные такой возможности лишены. Но т.к. потребность в этом осталась, в классы можно добавить статический блок или блоки, которые по сути своей эквивалентны вызову статических конструкторов.

Вот как это выглядит:

Код Что происходит на самом деле
class Cat {
    public static int catCount = 0 ;
    public static String namePrefix;

    static {
    Properties p = new Properties();
    p.loadFromFile("cat.properties");
    namePrefix = p.get("name-prefix");
}

    public static int maxCatCount = 50;

    static {
        Properties p = new Properties();
        p.loadFromFile("max.properties");
        if (p.get("cat-max") != null)
        maxCatCount = p.getInt("cat-max");
    }

}
class Cat {
    public static int catCount;
    public static String namePrefix;
    public static int maxCatCount;

    //статические конструкторы в Java
    //запрещены, но если бы они были, то все
    //выглядело бы так
    public static Cat() {
        catCount = 0;

        Properties p = new Properties();
        p.loadFromFile("cat.properties");
        namePrefix = p.get("name-prefix");

        maxCatCount = 50;

        Properties p2 = new Properties();
        p2.loadFromFile("max.properties");
        if (p2.get("cat-max")!=null)
        maxCatCount = p2.getInt("cat-max");
    }
}
4
Задача
Java Core, 5 уровень, 7 лекция
Недоступна
Набираем код Ӏ Java Core: 5 уровень, 7 лекция
Внимание! Объявляется набор кода на JavaRush. Включите режим повышенной внимательности, расслабьте пальцы, читайте код и… набирайте его в соответствующем окошке. Набор кода — не бесполезное занятие, как может показаться на первый взгляд: вы привыкаете к синтаксису и запоминаете его (современные IDE редко дают вам это сделать).

Это очень похоже на то, что происходит при вызове конструктора. Я даже записала это в виде несуществующего статического конструктора.

— Да, я все понял.

— Отлично.

Комментарии (353)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Grigoryvvv Уровень 28 Expert
24 августа 2026
24.08.2026 / 25 уровень
Rei Уровень 32
3 марта 2026
написано так, будто автор сам понял и ушёл
16 февраля 2026
Есть кто-нибудь? а то последний комментарий от 19 августа 2025 года...
FosTeR Уровень 51
19 февраля 2026
Есть. 19.02.2026✔
20 февраля 2026
Ура, я тут не один) Догоняй)
Win32Trojan Уровень 2
13 августа 2026
Надеюсь еще можно догонять) а то тот парень тебя уже обогнал ))
23 августа 2026
Догоняй, я уже к стажировке готовлюсь в Тбанке)
Win32Trojan Уровень 2
24 августа 2026
Я тоже туда подавал) Но потом узнал, что там не всё так гладко от того кто уже там был) И призадумался )
16 сентября 2026
А можешь чуть подробней рассказать?
TimJohnzz Уровень 23
25 сентября 2026
мужики, реально да это все существует, и после этого курса можно устроиться на полноценную работу? Я пока на старом джава курсе, но я так понял, помимо синтаксиса тут все совпадает с курсом Java25. И вот сижу я на 15 уровне(25 на Java25) и думаю, а реально ли все это. И еще, что обычно требуют помимо знания самой Java, я как то смотрел, там еще куча всяких штук по типу Maven нужна.
Maxim Terletsky Уровень 26
10 октября 2026
@TimJohnzz, после JavaRush устроиться можно, но одного курса мало. Обычно требуют: Git, Maven/Gradle, SQL (PostgreSQL/MySQL), JDBC, Hibernate/JPA, Spring (Core, Boot, MVC, Data), REST, JUnit/Mockito, базово Docker и Linux. Плюс 2-3 пет-проекта на GitHub. Если брать Fullstack, то потребуется ещё фронтенд: HTML, CSS, JavaScript (ES6+), TypeScript, один из фреймворков — React, Angular или Vue, плюс сборщики (Webpack/Vite), npm и понимание REST/JSON с точки зрения фронтенда. По сути это ещё один полноценный стек, и поэтому Fullstack заниает больше времени на изучение. Более конкретный набор стеков зависит от жадности потребностей работодателя (ATS-системы никто не отменял) и от того, на какой уровень ты идёшь (Junior, Middle). Если ты запутался, я бы посоветовал тебе ответить на следующие вопросы: 1. На какую вакансию претендую? 2. Какие компетенции необходимы для этой вакансии? 3. Где могу освоить эти стеки бесплатно или с более выгодным соотношением цена/качество? 4. Каким будет план подготовки к собеседованиям с учётом имеющегося стека и времени? Пример: хочу условно стать Junior Backend Java-разработчиком. На HH.ru/LinkedIn смотрю требования и группирую наиболее часто встречающиеся из них в Excel-таблице. У ИИ спрашиваю, для чего нужен каждый стек и в каком порядке его изучать. Ищу материалы на Stepik/YouTube, сверяю их содержание с рекомендациями ИИ и добавляю лучшие из них в roadmap. Составляю план подготовки к собесам и готовлюсь сам — курсы дают базу, но трудоустройство целиком на тебе =)
Maxim Terletsky Уровень 26
10 октября 2026
@TimJohnzz, для ответов на подобные вопросы создал для себя Roadmap Java-разработчика, систематизирующий знания, необходимые условному идеальному сильному Java-разработчику: Roadmap Java-разработчика После этого докрутил к нему два календарных плана подготовки с учётом своих временных ограничений (Backend vs Backend+Frontend): План подготовки: Java Backend Developer План подготовки: Java Fullstack Developer
TimJohnzz Уровень 23
12 октября 2026
Большое спасибо за такой подробный ответ!
Maxim Terletsky Уровень 26
12 октября 2026
Не за что, друг. Будут проблемы — пиши. Сообщество всегда поможет!
Anonymous #3585174 Уровень 33
19 августа 2025
Like
Anonymous #3526086 Уровень 27
27 июля 2025
вот задачка с собеседований, запустив понятно что зачем вызывается public class StaticTrick { static { System.out.println("Static block 1"); } static int x = initializeX(); static { System.out.println("Static block 2, x = " + x); } int y = initializeY(); { System.out.println("Instance block, y = " + y); } public StaticTrick() { System.out.println("Constructor"); } private static int initializeX() { System.out.println("Initializing x"); return 10; } private int initializeY() { System.out.println("Initializing y"); return 20; } public static void main(String[] args) { System.out.println("Main start"); StaticTrick obj1 = new StaticTrick(); System.out.println("Main end"); } }
Alexander Уровень 12
8 мая 2025
Статический блок в Java — это специальный блок кода, который выполняется один раз при загрузке класса в память, ещё до создания объектов и до вызова любых методов. Он используется для инициализации статических переменных или выполнения кода, который должен быть выполнен только один раз для всего класса.

class MyClass {
    static {
        // Этот код выполнится один раз при загрузке класса
        System.out.println("Статический блок выполняется");
    }

    public static void main(String[] args) {
        System.out.println("main метод выполняется");
    }
}

Вывод:

Статический блок выполняется
main метод выполняется
Где используется: - Для инициализации сложных статических переменных (например, из файла или базы данных) - Для настройки класса перед его использованием Особенности: - Выполняется только один раз при первой загрузке класса. - Может быть несколько статических блоков, и они выполняются в порядке появления в коде. - Нельзя использовать нестатические переменные внутри статического блока.
Олег Сычев Уровень 6
8 мая 2025
Огромное спасибо! Статья большая и сложная, благодаря твоему комментарию - сразу все понятно!)
Ни фига не понял , что это вообще было, Амиго ?
Vitalii Shevchenko Уровень 1
16 апреля 2025
Якщо теж не зрозуміли - https://www.youtube.com/watch?v=TdvnGw_KcFY
A_nanastya #1234567 Уровень 39 Expert
17 февраля 2025
-угу, хорошо,я понял.. *на самом деле.. я ничего.. не понял*
Antariko Уровень 1
14 января 2025
Спасибо, что на моём веку существуют нейросети, чтобы нормально объяснять подобные криво объясненные темы.