Перечисления в Java
Перечислите фиксированный набор имён через enum, чтобы программа выбирала только из этого списка. Напишите enum Level с LOW, MEDIUM и HIGH. В Yard.java присвойте Level mark = Level.MEDIUM; и напечатайте mark. Скомпилируйте через javac Yard.java и запустите java Yard. На экране должен быть MEDIUM. Вторая демо запускает switch по той же метке и печатает medium. Классы abstract оставьте для следующей страницы — этот урок про короткий список фиксированных имён и как вы печатаете или ветвитесь по одному из них.
Напечатайте одно имя enum
Страница интерфейсов заполняла пустые обещания методов через implements. Эта страница вместо этого перечисляет константы. Откройте Yard.java. Держите имя public-класса Yard. Удалите оставшиеся демо Signal / implements, если они хоронят историю enum, файлы horn от Truck, демо путей и любой клавиатурный Scanner. Программа не должна ждать ввода. Строка import не нужна.
Объявите enum над public-классом:
enum Level {
LOW,
MEDIUM,
HIGH
}
Разделяйте имена запятыми. На этой учебной форме держите их в верхнем регистре. Последнему имени в этом учебном файле конечная запятая не нужна.
Внутри Yard.main выберите одно имя и напечатайте его:
Level mark = Level.MEDIUM;
System.out.println(mark);
Вы не пишете new Level(). Вы пишете имя типа, точку и константу: Level.MEDIUM.
enum Level {
LOW,
MEDIUM,
HIGH
}
public class Yard {
public static void main(String[] args) {
Level mark = Level.MEDIUM;
System.out.println(mark);
}
}
Из папки, где лежит Yard.java, запустите javac Yard.java. Когда скобки, фигурные скобки и точки с запятой совпадают, javac не пишет собственной строки. Затем запустите java Yard — не java Yard.java. Уберите окончание .java из команды запуска. Держите один public-класс в файле, чтобы имя совпадало с Yard. Enum Level на этой учебной форме остаётся без public, когда стоит рядом с Yard в том же файле.
Экран показывает MEDIUM. Пройдите запуск один раз. Java стартует в Yard.main. Переменная mark хранит константу Level.MEDIUM. Печать mark выводит имя этой константы. Другие имена LOW и HIGH остаются доступны на типе, но эта демо печатает только то, что вы присвоили.
Прочитайте строку присваивания ещё раз: тип — Level, значение — Level.MEDIUM. Обе стороны принадлежат одному enum. Вы не собираете свободную текстовую строку; вы выбираете перечисленное имя. Держите эту привычку, когда позже смените метку на LOW или HIGH в личном эксперименте — законны только имена из списка enum.
Если вы всё ещё видите honk из файла интерфейса, переключитесь на учебный файл enum и снова запустите java Yard. Если javac жалуется на отсутствующую константу, проверьте написание и верхний регистр MEDIUM. Если вы пытаетесь изобрести четвёртое имя в месте вызова, не перечислив его в enum, javac отказывает — список в enum и есть разрешённый набор.
Скажите правило вслух, глядя на экран: enum перечисляет имена, код выбирает одно через точку, печать показывает это имя. Не изобретайте класс abstract на этой странице. Abstract-классы ждут следующего урока.
Ветвление по enum через switch
Вторая программа держит тот же список Level. main по-прежнему присваивает Level.MEDIUM. switch по mark печатает слово в нижнем регистре для выбранного case.
enum Level {
LOW,
MEDIUM,
HIGH
}
public class Yard {
public static void main(String[] args) {
Level mark = Level.MEDIUM;
switch (mark) {
case LOW:
System.out.println("low");
break;
case MEDIUM:
System.out.println("medium");
break;
case HIGH:
System.out.println("high");
break;
}
}
}
Скомпилируйте через javac Yard.java, затем запустите java Yard. Экран показывает medium. Switch вошёл в case MEDIUM, потому что mark хранил Level.MEDIUM. break останавливает этот case, чтобы последующие case не выполнялись. В более позднем эксперименте меняйте только присвоенную константу, если хотите увидеть low или high — список enum оставьте тем же.
Внутри каждого case пишите голое имя константы: case MEDIUM:, не case Level.MEDIUM:. Switch уже знает тип из switch (mark). Держите break после каждой печати на этой учебной форме, чтобы учебный вывод оставался одной ясной строкой. Пройдите глазами три case один раз: LOW соответствует low, MEDIUM — medium, HIGH — high. Для одного присваивания выполняется только одна из этих печатей.
Если рядом ещё лежат демо интерфейсов, оставьте их как историю. Для этого урока запускайте учебный файл enum, чтобы экран показал MEDIUM или medium, а не honk. Если javac жалуется на дублирующиеся public-классы, в файле всё ещё больше одного public-типа — public держите только у Yard.
Три имени Level
📊 Level enum names
| Name | Role on this page |
|---|---|
LOW |
listed constant; switch can print low |
MEDIUM |
assigned and printed in both demos |
HIGH |
listed constant; switch can print high |
Таблица — короткая карта этой страницы. Enum держит все три имени. Первая демо печатает среднее имя как MEDIUM. Вторая демо сопоставляет тот же выбор со словом в нижнем регистре medium. Держите список коротким и фиксированным; не считайте метку свободным набранным String на этой странице. |
Сравнение с интерфейсами
На странице интерфейсов Signal обещал пустые методы, а Truck implements Signal заполнял их. На этой странице enum Level перечисляет имена, а Yard выбирает одно. Вы по-прежнему компилируете Yard.java и запускаете java Yard. Новые токены — enum, список констант в верхнем регистре, Level.MEDIUM и — во второй демо — case switch по этим именам.
Если всё ещё открыт оставшийся файл implements Signal, вы увидите тела методов и honk. Переключитесь на файл enum, чтобы сверху было enum Level, а main присваивал константу. Держите демо abstract-классов вне этой страницы. Держите клавиатурный ввод вне этой страницы.
Перед abstract-классами
Вы можете объявить enum Level с LOW, MEDIUM и HIGH, присвоить Level.MEDIUM и увидеть MEDIUM на экране. Вы можете сделать switch по этой метке и увидеть medium. Компилируйте Yard.java и запускайте java Yard для каждой сохранённой демо по очереди. Программа выбирала из фиксированного списка. Следующая страница — abstract-классы, где родительский тип может оставить метод без полного тела, чтобы потомки дописали его.
Держите демо печати для ясной константы на экране. Держите демо switch для явной ветки по этой константе. Держите abstract-файлы вне этой страницы. Эти три привычки — контрольная точка перед переходом дальше. Когда MEDIUM появляется из прямой печати — и когда medium появляется из switch — enum сделал работу этого урока, и вы готовы к следующей теме про abstract-классы.
Последний проход по папке: один public Yard, один enum Level с тремя именами, без ожидания клавиатуры, без навязанного класса abstract. Ещё раз запустите javac Yard.java и java Yard на той демо, которую оставляете открытой. Если экран всё ещё совпадает с историей средней строки таблицы, список enum крепок, и курс может перейти к abstract-классам на следующей странице.
🧠 Проверьте Свои Знания
Проверьте Свои Знания
Бросьте себе вызов с помощью этой интерактивной викторины и узнайте, насколько хорошо вы понимаете тему
📝 Инструкции
- Внимательно прочитайте каждый вопрос
- Выберите лучший ответ на каждый вопрос
- Вы можете пересдавать тест столько раз, сколько захотите
- Ваш прогресс будет показан вверху