Загрузка...

Пакеты в Java

Положите класс Bell в папку с именем kit с первой строкой package kit; и статическим методом ring(), который печатает ding. В Lobby.java рядом с этой папкой — не внутри kit — вызовите из main kit.Bell.ring();. Скомпилируйте из родительской папки и запустите java Lobby. Экран должен показать одну строку: ding. Имя пакета и имя папки совпадают. Вызов с kit.Bell впереди — то, чему учит эта страница. Слово import оставьте для следующей страницы.

Имя папки, которое объявляет файл

До сих пор каждый класс лежал в одной плоской папке. Пакет группирует классы под именем папки. Первая строка файла должна назвать это имя: package kit;. Файл Bell.java должен жить внутри папки kit. Если папка и строка package не совпадают, javac жалуется.
Сначала создайте папку kit. Внутри неё создайте Bell.java. Первая строка — package kit;. Затем строка public class — public class Bell. Не оставляйте здесь старое имя класса Gate или Tag. Напишите один статический метод:
public static void ring() { System.out.println("ding"); }
Поставьте на метод public, чтобы класс вне пакета мог его вызвать. В Bell.java нет main. Сохраните перед компиляцией.

Bell in package kit

java
package kit;

public class Bell {
    public static void ring() {
        System.out.println("ding");
    }
}

Lobby вызывает kit.Bell.ring

Создайте Lobby.java в родительской папке — на том же уровне, что и папка kit, не внутри kit. Его строка public class — public class Lobby. Внутри main напишите kit.Bell.ring();. На этой странице не пишите import kit.Bell;. Полного имени kit.Bell достаточно для вызова.
Держите Lobby как класс, в котором есть main. Не кладите main внутрь Bell для этого урока. Если рядом ещё лежит оставшийся файл Pier со страницы access, не запускайте для этого урока java Pier — после компиляции из родительской папки выполните java Lobby.

Lobby calls kit.Bell.ring

java
public class Lobby {
    public static void main(String[] args) {
        kit.Bell.ring();
    }
}

Из родительской папки, где лежат и Lobby.java, и папка kit, выполните javac kit/Bell.java Lobby.java. В Windows тот же смысл с kit\Bell.java — направьте javac на файл внутри папки пакета, затем на Lobby.java. Когда скобки, фигурные скобки и точки с запятой совпадают, javac не пишет своей строки. Затем запустите java Lobby — не java Lobby.java и не java kit.Bell. Уберите окончание .java из команды запуска. Запускайте класс, в котором есть main. Те же команды работают в Windows и в macOS, когда пути совпадают с вашей оболочкой.
Программа должна напечатать одну строку и остановиться: ding. Она не просит вас вводить текст. Если терминал ждёт ввода с клавиатуры, в каком-то файле ещё остался вызов nextLine из старого упражнения. Удалите этот вызов и оставьте в Lobby kit.Bell.ring();, а в Bell — package kit;.
Пройдите запуск один раз. Java начинает с Lobby.main. Вызов kit.Bell.ring() находит класс Bell в пакете kit и выполняет статический метод. Тело печатает ding. Экран показывает ding. Больше ничего печататься не должно. Если вы видите 9 или ok, вы всё ещё запускаете старую программу Pier или Yard с предыдущей страницы.
Если Bell.java лежит рядом с Lobby.java без папки kit, а файл всё ещё говорит package kit;, javac отказывает. Переместите файл в kit. Если вы вызовете Bell.ring(); без kit. извне пакета, javac на этой странице не увидит короткое имя — держите kit.Bell.ring();. Имя пакета — часть полного имени типа, пока следующая страница не научит import.

Папка и строка package рядом

Короткая таблица держит совпадение ясным.

📊 folder vs package line

Часть На этой странице
имя папки kit
первая строка в Bell.java package kit;
вызов из Lobby kit.Bell.ring();
import не на этой странице — следующий урок
Таблица только напоминание. Набранные куски, которые вы держите: package kit; в файле Bell, путь файла под kit и kit.Bell.ring(); в Lobby.

Сравнение с access и с плоской папкой

На странице access Gate и Pier делили одну папку с private-полем. Это по-прежнему работает. Эта страница добавляет папку пакета и строку package. Оставшееся демо Gate g = new Gate(9); g.show(); — другой урок. Для этой страницы держите kit/Bell.java, Lobby.java и kit.Bell.ring();.
Вы по-прежнему можете использовать плоские папки для крошечных демо. Этот урок выбирает пакет, чтобы вы увидели имя перед классом. Не смешивайте g.show() и kit.Bell.ring() в одном демо Lobby на этой странице. Одного ясного пути достаточно: строка package, совпадающая папка, полный вызов из Lobby.

Компилируйте из родителя, а не только изнутри kit

Оставайтесь в родительской папке, когда компилируете и когда запускаете java Lobby. Если вы сделаете cd внутрь kit и попробуете запустить Lobby оттуда без настройки classpath, короткий путь урока ломается. Держите родителя рабочей папкой для этой страницы. Файл .class для Bell должен появиться под kit после удачной компиляции, рядом с Bell.java.
Если экран показывает 9 или ok, всё ещё работает старая программа Pier или Yard. Переключитесь на java Lobby. Если javac не находит kit.Bell, проверьте написание имени папки и строку package kit; посимвольно.

Что остаётся для import

Эта страница набирает полное имя kit.Bell при каждом вызове. Более поздняя страница — import — показывает, как import kit.Bell; позволяет писать короткое имя Bell в Lobby. Здесь оставайтесь с полным именем. Не изобретайте import на этой странице, если только вы уже его не знаете; цель урока — папка пакета и kit.Bell.ring();.
Когда старые файлы Gate.java или Pier.java ещё лежат в родительской папке, не трогайте их или удалите только если они путают команду компиляции. После компиляции пакетной пары с этого урока запустите java Lobby.

Перед import

Вы можете положить Bell.java под папку kit с package kit; и public static void ring(), который печатает ding, и из Lobby вызвать kit.Bell.ring(); без import. Скомпилируйте из родительской папки и запустите java Lobby. Экран показывает ding. Имя пакета совпало с папкой. Следующая страница — import, где после строки import короткого имени достаточно.
Держите package kit; первой строкой в Bell. Держите файл внутри kit. Держите вызов как kit.Bell.ring();. Эти три привычки — контрольная точка этой страницы перед тем, как идти дальше. Когда экран показывает ding из родительской папки, раскладка пакета делает свою работу для этого урока.

🧠 Проверьте Свои Знания

Готов к Началу

Проверьте Свои Знания

Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему

❓
6
Вопросы
🎯
70%
Для Прохождения
♾️
∞
Время
🔄
∞
Попытки

📝 Инструкции

  • Внимательно прочитайте каждый вопрос
  • Выберите лучший ответ на каждый вопрос
  • Вы можете пересдавать тест столько раз, сколько захотите
  • Ваш прогресс будет показан вверху