Введение в Java
Теория: Модуль 3. Урок 3. Уровни методов в Java.
Оговорка: 14
static level methodfield.
Перед просмотром лекции желательно освежить в памяти знания про методы: что такое методы, как их создавать и как их вызывать, и про пакеты.
инстанс (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 и так импортируется автоматически, для статического импорта — все равно пришлось прописать импорты необходимых классов.
Обратите внимание, что при импортировании классов — точки в конце не нужно ставить!
Дальше создание классов на реальном проекте "Крестики-нолики".
Полезные ссылки
Завершено
0 / 38