Java руководство для начинающих - Шилдт Герберт (2012)
-
Год:2012
-
Название:Java руководство для начинающих
-
Автор:
-
Жанр:
-
Оригинал:Английский
-
Язык:Русский
-
Издательство:Вильямс
-
Страниц:316
-
ISBN:978-5-8459-1770-6
-
Рейтинг:
-
Ваша оценка:
Java руководство для начинающих - Шилдт Герберт читать онлайн бесплатно полную версию книги
С помощью какого метода из класса Thread можно получить имя потока?
С помощью метода getName ().
Какое значение возвращает метод is Alive () ?
Он возвращает логическое значение true, если вызывающий поток исполняется,
или логическое значение false, если поток завершен.
Глава 12. Перечисления, автоупаковка,
статический импорт и аннотации
Константы перечислимого типа иногда называются самотипизированными. Что это
означает?
Часть “само” в термине самотипизированный означает тип перечисления, в котором
определена константа. Следовательно, константа перечислимого типа является объектом того перечисления, в которое она входит.
Какой класс автоматически наследуют перечисления?
Все перечисления наследуют от класса Enum.
Напишите для приведенного ниже перечисления программу, в которой метод
values () служит для отображения списка констант и их значений.
enum Tools {
SCREWDRIVER, WRENCH, HAMMER, PLIERS
}
Это задание имеет следующее решение:
enum Tools {
SCREWDRIVER, WRENCH, HAMMER, PLIERS
}
class ShowEnum {
public static void main(String args[]) {
for(Tools d : Tools.values())
System.out.print(d + " has ordinal value of " +
d.ordinal() + '\n');
}
}
Программу, имитирующую автоматизированный светофор и созданную в примере
для опробования 12.1, можно усовершенствовать, внеся ряд простых изменений,
чтобы выгодно воспользоваться возможностями перечислений. В исходной версии
этой программы продолжительность отображения каждого цвета светофора регулировалась в классе Traf ficLightSimulator, причем величины задержек были
жестко запрограммированы в методе run (). Измените исходный код программы
584 Jav\, 7: руководство для начинающих, 5-е издание
таким образом, чтобы продолжительность отображения каждого цвета светофора задавалась константами перечислимого типа Traf f icLightColor. Для этого вам понадобятся конструктор, переменная экземпляра, объявленная как private, а также
метод getDelay (). Подумайте о том, как еще можно улучшить данную программу.
(Подсказка: попробуйте отказаться от оператора switch и воспользоваться порядковыми значениями каждого цвета для переключения светофора.)
Усовершенствованная версия программы, имитирующей работу светофора, приведена ниже. В нее внесены два существенных изменения. Во-первых, величина задержки переключения связана теперь со значением перечислимого типа, что улучшает структуру кода. И во-вторых, в методе run () удалось обойтись без оператора
switch. Вместо этого методу sleep () теперь передается вызов tic. getDelay (), и
благодаря этому автоматически устанавливается задержка, соответствующая текущему цвету светофора.
// Усовершенствованная версия программы, имитирующей работу светофора.
// Величины задержки теперь хранятся в классе TrafficLightColor.
// Перечисление цветов переключения светофора,
enum TrafficLightColor {
RED(12000), GREEN(10000), YELLOW(2000);
private int delay;
TrafficLightColor(int d) {
delay = d;
}
int getDelay() { return delay; }
}
// Имитация автоматизированного светофора,
class TrafficLightSimulator implements Runnable {
private Thread thrd; // Поток для имитации светофора
private TrafficLightColor tic; // Текущее значение цвета
boolean stop = false; // Остановка имитации, если истинно
boolean changed = false; // Переключение светофора, если истинно
TrafficLightSimulator(TrafficLightColor init) {
tic = init;
thrd = new Thread(this);
thrd.start();
}
TrafficLightSimulator() {
tic = TrafficLightColor.RED;
thrd = new Thread(this);
thrd.start();
}
// Запуск имитации автоматизированного светофора.