Что означает ключевое слово static в Java?

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

Ответ

Ключевое слово static в Java обозначает, что член класса (поле, метод, блок, вложенный класс) принадлежит самому классу, а не его экземплярам (объектам). Он загружается в память при инициализации класса.

Основные применения:

  1. Статические поля (переменные класса):

    • Общая память для всех объектов класса.
      class Counter {
      static int instanceCount = 0; // Счетчик всех созданных объектов
      Counter() { instanceCount++; }
      }
  2. Статические методы:

    • Вызываются через имя класса (ClassName.method()).
    • Могут обращаться только к статическим членам. Не могут использовать this.
      class MathUtils {
      static double pow(double base, int exponent) { /* ... */ }
      }
      // Вызов: MathUtils.pow(2, 3);
  3. Статический блок инициализации:

    • Выполняется один раз при загрузке класса.
      class Config {
      static Properties props;
      static {
          props = new Properties();
          // Загрузка конфигурации из файла
      }
      }
  4. Статические вложенные классы:

    • Не имеют доступа к нестатическим членам внешнего класса.

Важное ограничение: Статические методы не могут быть переопределены (они скрываются, но не полиморфны).