Классы в Java
Класс — именованный тип, который вы объявляете в файле .java. Положите public class Badge в файл с именем Badge.java. Внутри этого типа напишите короткий static-метод show, который печатает ready. Во втором файле Desk.java положите public class Desk с main, который вызывает Badge.show();. Скомпилируйте оба файла, затем запустите java Desk. Экран должен показать одну строку: ready. Здесь вы не считаете вниз рекурсией. Вы именуете тип в его собственном файле и просите метод этого типа напечатать. Этот второй именованный тип — класс, который не только файл запуска — то, чему учит эта страница.
Тип живёт в своём файле
До страниц про методы почти каждое демо держало main и вспомогательные методы внутри одной public class. Это по-прежнему работает. Эта страница нарочно добавляет вторую public class. Badge — имя типа. Ему не нужно быть программой, которая стартует. Desk — программа, которая стартует. Каждая public class сидит в файле, чьё имя точно совпадает с именем класса, включая заглавные буквы.
Сначала создайте Badge.java. Первая строка типа — public class Badge. Не пишите public class Desk в этом файле. Не оставляйте здесь старое имя класса Ladder или Gate. Компилятор связывает имя public class с именем файла. Если файл — Badge.java, а строка говорит public class Ladder, javac отказывает.
Внутри фигурных скобок Badge напишите static void show(). Тело — одна печать: System.out.println("ready");. Оставьте void на этой странице. Метод не возвращает число. Он только пишет слово. В Badge.java на этой странице нет main. Так задумано. Класс может держать методы, не будучи стартовым классом.
Сохраните Badge.java перед компиляцией. Первая программа в рамке — этот файл один.
public class Badge {
static void show() {
System.out.println("ready");
}
}
Desk стартует; Badge печатает
Создайте второй файл в той же папке: Desk.java. Строка public class — public class Desk. Внутри main напишите один вызов: Badge.show();. Этот вызов называет тип Badge, точку, затем метод show. Не пишите одно show(); внутри Desk, если show не живёт также в Desk. На этой странице show принадлежит Badge, поэтому вызов несёт имя типа.
public class Desk {
public static void main(String[] args) {
Badge.show();
}
}
Оба файла должны лежать в одной папке, чтобы javac видел их вместе. Из этой папки выполните javac Badge.java Desk.java. Можно также сначала скомпилировать Badge.java, потом Desk.java; оба порядка работают, когда файлы готовы. Когда скобки, фигурные скобки и точки с запятой совпадают, javac не пишет своей строки. Затем выполните java Desk — не java Desk.java и не java Badge. Уберите окончание .java из команды запуска. Стартуйте класс, который держит main. Те же два вида команд работают в Windows и macOS.
Программа должна напечатать одну строку и остановиться: ready. Она не должна ждать ввода. Если терминал ждёт клавиатуру, в каком-то файле ещё остался вызов nextLine из старого упражнения. Удалите его и оставьте Badge.show(); в Desk плюс метод show в Badge.
Пройдите запуск один раз. Java начинает с Desk.main. Вызов Badge.show() входит в метод типа Badge. Этот метод печатает ready и возвращается. Затем Desk заканчивается. Слово на экране пришло из Badge, а не из println, написанного внутри самого Desk. Это разделение — суть: один класс стартует программу; другой класс владеет помощником.
Имя файла и public class должны совпадать
Прочитайте пару один раз в маленькой таблице. У каждой public class своё имя файла.
📊 file, public class, role
| Файл | public class | Роль на этой странице |
|---|---|---|
Badge.java |
Badge |
тип, который держит show |
Desk.java |
Desk |
программа, которая держит main |
Если переименовать файл в badge.java с маленькой b, пока строка всё ещё говорит public class Badge, некоторые системы считают несовпадение ошибкой. Держите заглавную B в обоих местах на этой форме для начинающих. Если положить public class Badge и public class Desk в один файл, javac отказывает: одна public class на файл. Вспомогательные private-классы в том же файле ждут следующих курсов. Здесь вы держите два public-файла.
Частая путаница — запускать java Badge, потому что только что написали Badge.java. У этого класса на этой странице нет main, поэтому запуск не стартует. Выполните java Desk. Другая путаница — писать show(); внутри Desk без префикса Badge., когда show есть только у Badge. Тогда компилятор ищет show внутри Desk и не находит.
Оставшиеся демо рекурсии могут запутать папку. Файл, который всё ещё называется Ladder.java и содержит down(3), — другая программа. Держите папку этого урока на Badge.java и Desk.java, пока учите форму из двух файлов. Здесь down не нужен.
Сначала скомпилируйте тип, потом стартер
Можно практиковать шаг компиляции меньшими кусками. Сначала скомпилируйте только тип: javac Badge.java. Эта команда проверяет Badge, даже если ещё ничего не стартовало. Файл класса может компилироваться без main. Затем скомпилируйте стартер: javac Desk.java. Если Badge уже скомпилирован в той же папке, Desk может разрешить имя Badge в вызове. Наконец выполните java Desk и подтвердите единственную строку ready.
Если javac Desk.java говорит, что не находит символ Badge, проверьте три вещи. Папка должна держать Badge.java или скомпилированный класс Badge рядом с Desk.java. Вызов должен писать Badge с теми же заглавными, что у типа. Имя метода после точки должно быть show, совпадая с заголовком в Badge.
Написание System.out.println("Badge"); внутри Desk печатает слово Badge. Оно не вызывает метод на типе. Держите Badge.show();, когда хотите печать, которая живёт в Badge.
Чего эта страница ещё не делает
Эта страница не пишет new Badge(). Создание объекта из класса — следующая страница. Здесь вызов — Badge.show(): static-метод на самом имени типа. Вы также ещё не храните поля на badge. Поля ждут более поздней страницы в этом модуле. Работа сейчас — только именованный тип в своём файле, совпадающая строка public class и вызов, который использует это имя типа.
Можно сменить напечатанное слово внутри show на set и перекомпилировать оба файла (или хотя бы Badge.java, затем снова запустить Desk). Экран должен следовать строке, которую вы положили в Badge. Desk держит тот же вызов. Ещё один способ увидеть разделение: править метод типа, оставлять вызов стартера.
Перед objects
Вы можете объявить public class Badge в Badge.java, положить внутрь static void show() и вызвать Badge.show(); из Desk.main. Имя файла и имя public class совпадают. Скомпилируйте тип и стартер, затем выполните java Desk. Экран показывает строку, которую печатает show. Класс — этот именованный тип. Следующая страница — objects; там вы строите значение из класса через new.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху