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