Что такое статические поля (static fields) в ООП?

«Что такое статические поля (static fields) в ООП?» — вопрос из категории Основы программирования, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Статические поля (поля класса) — это переменные, объявленные с модификатором static. Они принадлежат самому классу, а не отдельным его экземплярам (объектам). В памяти существует только одна копия статического поля, которая инициализируется при загрузке класса.

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

  • Общая память: Все экземпляры класса разделяют одно статическое поле.
  • Доступ: К полю можно обращаться как через имя класса (ClassName.fieldName), так и через ссылку на объект (но это не рекомендуется для ясности кода).
  • Время жизни: Поле существует с момента загрузки класса и до завершения работы программы.
  • Инициализация: Часто инициализируются при объявлении или в статическом блоке инициализации.

Типичные случаи использования:

  • Константы класса (public static final).
  • Счётчики количества созданных экземпляров.
  • Кэши, общие конфигурации или разделяемые ресурсы (требует осторожности в многопоточности).

Пример на Java:

public class AppConfig {
    // Статическое поле-константа
    public static final String APP_NAME = "MyApp";

    // Статическое поле-счётчик
    private static int instanceCount = 0;

    public AppConfig() {
        instanceCount++; // Увеличиваем счётчик при создании каждого объекта
    }

    public static int getInstanceCount() {
        // Статический метод для доступа к статическому полю
        return instanceCount;
    }
}

public class Main {
    public static void main(String[] args) {
        // Доступ к константе через имя класса
        System.out.println(AppConfig.APP_NAME); // MyApp

        new AppConfig();
        new AppConfig();

        // Доступ к счётчику через статический метод
        System.out.println(AppConfig.getInstanceCount()); // 2
    }
}