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