В чем разница между статическими и нестатическими (экземплярными) членами класса в Java?

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

Ответ

Статические члены (поля, методы, блоки) принадлежат самому классу, а не его экземплярам. Существуют в единственном экземпляре и загружаются при инициализации класса. Нестатические члены принадлежат конкретному объекту (экземпляру) и создаются при каждом вызове new.

Сравнительная таблица: Критерий Статический член Нестатический член
Принадлежность Классу Объекту (экземпляру)
Количество в памяти Один на класс Один на каждый объект
Доступ через ИмяКласса.член ссылкаНаОбъект.член
Доступ к контексту Нет доступа к this, только к другим статическим членам Есть доступ к this и ко всем членам (и статическим, и нестатическим)
Время жизни От загрузки класса до выгрузки JVM От создания до удаления объекта GC

Пример:

class Counter {
    // Статическое поле - общий счетчик для всех экземпляров
    static int totalCount = 0;
    // Нестатическое поле - уникально для каждого экземпляра
    int instanceId;

    public Counter(int id) {
        this.instanceId = id;
        totalCount++; // Изменяем общее для всех значение
    }

    // Статический метод - утилита
    static void printTotal() {
        System.out.println("Total instances: " + totalCount);
        // System.out.println(instanceId); // ОШИБКА: нет доступа к нестатическому полю
    }

    // Нестатический метод
    void printInfo() {
        System.out.println("ID: " + this.instanceId + ", Total: " + totalCount);
    }
}

// Использование:
Counter c1 = new Counter(1); // totalCount = 1
Counter c2 = new Counter(2); // totalCount = 2

c1.printInfo(); // ID: 1, Total: 2
Counter.printTotal(); // Total instances: 2

Когда использовать:

  • Статическое: Для констант (static final), фабричных/утилитарных методов, кэшей/пулов, общих данных.
  • Нестатическое: Для состояния и поведения, уникального для каждого объекта.