- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Java: руководство для начинающих (ЛП) - Шилдт Герберт
Шрифт:
Интервал:
Закладка:
Перепишите программу, созданную в ответ на предыдущий вопрос, таким образом, чтобы в ней использовались классы, представляющие символьные потоки. Наэтот раз воспользуйтесь оператором try с ресурсами для автоматического закрытия файла./* Копирование текстового файла с заменой пробелов дефисами.В этой версии программы используются символьные потоки.Для того чтобы воспользоваться этой программой, укажитев командной строке имена исходного и целевого файлов. Например:java Hyphen2 source targetДля компиляции этого кода требуется JDK 7
или более поздняя версия данного комплекта./import java.io.;class Hyphen2 {public static void main(String args[])throws IOException{int i;// проверить сначала, указаны ли оба файлаif(args.length !=2 ) {System.out.println("Usage: CopyFile From To");return;}// скопировать файл и заменить в нем пробелы дефисами,// используя оператор try с ресурсамиtry (FileReader fin = new FileReader(args[0]);FileWriter fout = new FileWriter(args[1])){do {i = fin.read();// преобразовать пробел в дефисif((char)i == • ') i =if(i != -1) fout.write(i);} while(i != —1);} catch(IOException exc) {System.out.println("I/O Error: " + exc);}}}
К какому типу относится поток System. in?К типу InputStream.
Что возвращает метод read () из класса InputStream по достижении конца потока?Значение -1.
Поток какого типа используется для чтения двоичных данных?Поток типа DatalnputStream.
Классы Reader и Writer находятся на вершине иерархии классовсимвольного ввода-вывода
Оператор try без ресурсов служит для .автоматического управления ресурсами
Если для закрытия файла используется традиционный способ, то это лучше всегоделать в блоке finally. Верно или неверно?Верно.Глава 11. Многопоточное программирование
Каким образом имеющиеся в Java средства многопоточного программирования позволяют писать более эффективные программы?Средства многопоточного программирования дают возможность использовать периоды простоя, наступающие практически в любой программе. Когда операции водном потоке по каким-то причинам не выполняются, в действие вступают другиепотоки. В многоядерных системах два и больше потоков могут исполняться одновременно.
Для поддержки многопоточного программирования в Java предусмотрен класси интерфейс .Для поддержки многопоточного программирования в Java предусмотрен классThread и интерфейс Runnable.
В каких случаях следует отдать предпочтение расширению класса Thread над реализацией интерфейса Runnable?Подклассы, производные от класса Thread, целесообразно создавать в тех случаях, когда, помимо метода run (), требуется переопределить другие методы данногокласса.
Покажите, как с помощью метода j о in () можно организовать ожидание завершения потокового объекта MyThrd.MyThrd.join()
Покажите, как установить приоритет потока MyThrd на три уровня выше нормального приоритета.MyThrd.setPriority(Thread.N0RM_PRI0RITY+3);
Что произойдет, если в объявлении метода указать ключевое слово synchronized?Если указать ключевое слово synchronized в объявлении метода, то в каждый момент времени этот метод будет вызываться только в одном потоке для любого заданного объекта его класса.
Методы wait () и notify () служат для .взаимодействия потоков
Внесите в класс TickTock изменения для организации настоящего отчета времени.Первую половину секунды должен занимать вывод на экран слова "Tick", а вторую — вывод слова "Tock". Таким образом, сообщение "Tick-Tock" должно соответствовать одной секунде отсчитываемого времени. (Время переключения контекстов можно не учитывать.)Для организации отчета времени достаточно ввести в классе TickTock вызовы метода sleep (), как показано ниже.// Вариант класса TickTock, в который введены вызовы// метода sleep() для организации отсчета времени.class TickTock {String state; // Состояние часовsynchronized void tick(boolean running) {582 Javc,/: руководство для начинающих, 5-е изданиеif(!running) { // остановить часыstate = "ticked";notifyO; // уведомить ожидающие потокиreturn;}System.out.print("Tick ");// ожидать 1/2 секундыtry {Thread.sleep(500);} catch(InterruptedException exc) {System.out.println("Thread interrupted.");}state = "ticked"; // установить текущее состояние после такта "тик"notifyO; // разрешить выполнение метода tock()try {while(!state.equals("tocked"))wait (); // ожидать завершения метода tock()}catch(InterruptedException exc) {System.out.println("Thread interrupted.");}synchronized void tock(boolean running) {if(!running) { // остановить часыstate = "tocked";notifyO; // уведомить ожидающие потокиreturn;}System.out.println("Tock");// ожидать 1/2 секундыtry {Thread.sleep(500);} catch(InterruptedException exc) {System.out.println("Thread interrupted.");}state = "tocked"; // установить текущее состояние после такта "так"notifyO; // разрешить выполнение метода tick()try {while(!state.equals("ticked"))wait (); // ожидать завершения метода tick()}catch(InterruptedException exc) {System.out.println("Thread interrupted.");}Приложение А. Ответы на вопросы для самопроверки 583}}
Почему в новых программах на Java не следует применять методы suspend (),resume() и stop()?Методы suspend (), resume () и stop () не рекомендуется применять, посколькуони могут стать причиной серьезных осложнений при выполнении программы.
С помощью какого метода из класса 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();}// Запуск имитации автоматизированного светофора.Приложение А. Ответы на вопросы для самопроверки 585public void run() {while(!stop) {// По сравнению с предыдущей версией программы// код значительно упростился!try {Thread.sleep(tlc.getDelay());} catch(InterruptedException exc) {System.out.println(exc);}changeColor ();}}// Переключение цвета светофора,synchronized void changeColor() {switch(tic) {case RED:tic = TrafficLightColor.GREEN;break;case YELLOW:tic = TrafficLightColor.RED;break;case GREEN:tic = TrafficLightColor.YELLOW;}changed = true;notify(); // уведомить о переключении цвета светофора}// Ожидание переключения цвета светофора,synchronized void waitForChange() {try {while(!changed)wait(); // ожидать переключения цвета светофораchanged = false;} catch(InterruptedException exc) {System.out.println(exc);}}// Возврат текущего цвета.TrafficLightColor getColor() {return tic;}// Прекращение имитации светофора,void cancel() {stop = true;class TrafficLightDemo {public static void main(String args[]) {TrafficLightSimulator tl =new TrafficLightSimulator(TrafficLightColor.GREEN);for(int i=0; i < 9; i++) {System.out.println(tl.getColor());tl.waitForChange();}tl.cancel ();}}

