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

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

Ответ

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

Критерий Статический член Нестатический член
Принадлежность Классу Объекту (экземпляру класса)
Время жизни Загружается с классом, существует до выгрузки класса Создается с объектом, уничтожается с объектом
Доступ ClassName.memberName objectReference.memberName
Контекст (this) Не имеет доступа к this Имеет доступ к this (текущему объекту)
Доступ к другим членам Может обращаться только к другим статическим членам Может обращаться и к статическим, и к нестатическим членам

Пример на Java:

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

    public void increment() {
        instanceCount++;   // Изменяем поле объекта
        totalCount++;      // Изменяем общее статическое поле
    }

    // Статический метод — вызывается от имени класса
    public static int getTotalCount() {
        // return instanceCount; // ОШИБКА: нельзя обратиться к нестатическому полю
        return totalCount;
    }

    // Нестатический метод — вызывается от имени объекта
    public int getInstanceCount() {
        return instanceCount;
    }
}

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

System.out.println(c1.getInstanceCount()); // 1
System.out.println(Counter.getTotalCount()); // 2