Введение в Java
2026-02-26 17:20 Diff

Оговорка: 14

static level method field.

Перед просмотром лекции желательно освежить в памяти знания про методы: что такое методы, как их создавать и как их вызывать, и про пакеты.

инстанс (instance) — один экземпляр (объект), созданный на основе класса.

instantiation (создание объекта) — процесс создания объекта на основе класса. Пример: new Object(); — где-то в памяти создан один экземпляр класса Object.

Уровни методов

Методы бывают двух уровней — уровня инстанс (не static) и уровня класса (static) .   Метод уровня инстанс — без ключевого слова static, если же слово static присутствует - метод уровня класса.

Поля, как и методы, тоже имеют уровень класса и объекта. Поля с модификатором static видны всем объектам (инстансам) класса, а без этого модификатора — видны только внутри отдельно взятого инстанса.

Пример instance level methods:

  • Первый метод printGameName() —  выводит на экран название игры.
  • Второй метод printLevelCount() — выводит на экран количество уровней.

Ссылка this не обязательна перед полем levels, поскольку метод нестатический и он привязан к конкретному экземпляру класса. Компилятор сам подставит туда this.

Эту ссылку, this, каждый нестатический метод, хранит в своем фрейме (помним, что фреймы методов находятся в стеке).

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

Нужен ли this при вызове этого метода? (Указатель на текущий инстанс в оперативной памяти).

В методе printGameName() не нужен, поскольку он привязан к своему объекту.

Добавим статический метод и поле:

При создании фрейма в стеке, для метода уровня класса, в фрейме не будет ссылки this. Такие методы не имеют доступа к полям инстанса. Для вызова такого метода не нужен инстанс, так как он не использует поля инстанса. Вызвать такой метод можно из под имени класса.

Вот так:

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

Переделаем наш Game так:

Использовать это можно так:

Статическое импортирование (дополнение к "Модуль 2. Урок 4. Пакеты в Java.")

Статический импорт позволяет использовать статические методы и поля импортируемых классов без имен этих классов.

Разберем пример:

Этот класс использует статический метод и поле: sqrt и out (у статического поля out мы просто вызвали метод println). Если проследить их пакетную иерархию — обнаружится, что Math и System находятся в java.lang, то есть они импортированы автоматически.

Но мы можем использовать эти статические методы и поля прямо, без указания имени их классов.

Для статического импорта, сюрприз-сюрприз, используется ключевое слово static перед адресом и звездочки .* после имени класса.

Пример:

Не смотря на то, что java.lang и так импортируется автоматически, для статического импорта — все равно пришлось прописать импорты необходимых классов.

Обратите внимание, что при импортировании классов — точки в конце не нужно ставить!

Дальше создание классов на реальном проекте "Крестики-нолики".

Полезные ссылки