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

Ответ

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

Критерий Статический член Нестатический член
Принадлежность Классу Объекту (экземпляру класса)
Время жизни Загружается с классом, существует до выгрузки класса Создается с объектом, уничтожается с объектом
Доступ 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

Ответ 18+ 🔞

Давай разберём эту дичь, которая у всех в голове путается, как носки после стирки. Статическое и нестатическое — аж мозг ебёт, когда впервые слышишь.

Представь себе, блядь, завод по производству тапок. Класс — это чертёж тапка. А статический член — это, сука, общий счётчик на проходной, который считает ВСЕ тапки, произведённые по ЭТОМУ чертежу. Он один на всех, прикручен к стене завода. Нестатический член — это, например, шнурок на КОНКРЕТНОМ тапке. У каждого тапка свой, отдельный, ебёный шнурок.

Критерий Статический член (Счётчик на проходной) Нестатический член (Шнурок на тапке)
Кому пренадлежит Всему заводу (классу) Конкретному тапку (объекту)
Живёт когда Пока завод работает (класс загружен) Пока тапок не сносили и не выкинули (объект жив)
Как позвать Завод.счётчик тапокМой.шнурок
Видит ли себя (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 — спросили у КЛАССА общий итог для всех

Вот и вся магия, ёпта. Статическое — одно на всех, как общий унитаз в офисе. Нестатическое — у каждого в кабинке своё, личное. Главное — не перепутай, а то получишь NullPointerException в самый неподходящий момент, и будешь потом сидеть и думать: «И где же я, блядь, на null сослался?».