Для чего в Java используется статический блок (static {})?

«Для чего в Java используется статический блок (static {})?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Статический блок (static {}) предназначен для статической инициализации класса — выполнения кода один раз при первой загрузке класса в JVM.

Ключевые особенности и применение:

  • Выполняется до создания любого экземпляра класса или вызова статического метода.
  • Используется для сложной инициализации статических полей (когда простого присваивания недостаточно).
  • Подходит для загрузки конфигураций, регистрации драйверов БД, заполнения статических коллекций.

Пример:

public class DatabaseConfig {
    private static final Properties CONFIG = new Properties();

    // Статический блок для однократной загрузки настроек
    static {
        try (InputStream input = DatabaseConfig.class
                .getResourceAsStream("/db.properties")) {
            CONFIG.load(input);
            System.out.println("Конфигурация БД загружена.");
        } catch (IOException e) {
            throw new RuntimeException("Ошибка загрузки конфигурации", e);
        }
    }

    public static String getConfig(String key) {
        return CONFIG.getProperty(key);
    }
}

Важно: порядок выполнения нескольких статических блоков соответствует их порядку в коде.