Член экземпляра (instance member) принадлежит конкретному объекту класса, а статический член (static member) принадлежит самому классу.
Основные отличия:
- Доступ:
- Члены экземпляра доступны через объект класса:
ClassName object = new ClassName(); object.instanceVariable; object.instanceMethod();
- Статические члены доступны через имя класса или через объект:
ClassName.staticVariable; ClassName.staticMethod(); object.staticVariable; object.staticMethod(); (Обращение через объект не рекомендуется).
- Время жизни:
- Члены экземпляра создаются при создании каждого объекта класса и уничтожаются, когда объект перестает быть доступным (сборка мусора).
- Статические члены создаются при загрузке класса в память JVM и существуют до выгрузки класса.
- Память:
- Каждый объект класса имеет свою копию членов экземпляра, хранящуюся в памяти объекта.
- Существует только одна копия каждого статического члена, разделяемая всеми объектами класса.
- Ключевое слово:
- Члены экземпляра не используют ключевое слово
static.
- Статические члены используют ключевое слово
static.
- Доступ из других членов:
- Статические методы не могут напрямую обращаться к членам экземпляра без создания объекта.
- Методы экземпляра могут обращаться как к членам экземпляра, так и к статическим членам.
Пример:
java