Содержание · Подпакеты из пакета в java.lang 561 Пакет...

21
Предисловие 28 Часть I. Язык Java 31 Глава 1. История и развитие языка Java 33 Происхождение Java 33 Зарождение современного программирования: язык C 34 Следующий этап: язык C++ 35 Предпосылки к созданию Java 37 Создание языка Java 37 Связь с языком C# 39 Каким образом язык Java изменил Интернет 40 Аплеты на Java 40 Безопасность 41 Переносимость 41 Чудо Java: байт-код 41 Сервлеты: серверные программы на Java 43 Отличительные особенности Java 43 Простота 44 Объектная ориентированность 44 Надежность 44 Многопоточность 45 Архитектурная нейтральность 45 Интерпретируемость и высокая производительность 46 Распределенность 46 Динамичность 46 Эволюция языка Java 46 Версия Java SE 8 50 Культура нововведений 51 Глава 2. Краткий обзор Java 53 Объектно-ориентированное программирование 53 Две методики 53 Абстракция 54 Три принципа ООП 54 Содержание Java 8 book.indb 6 15.01.2015 2:29:42

Upload: others

Post on 25-Aug-2020

27 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

Предисловие 28

Часть I. Язык Java 31

Глава1.ИсторияиразвитиеязыкаJava 33Происхождение Java 33

Зарождение современного программирования: язык C 34Следующий этап: язык C++ 35Предпосылки к созданию Java 37

Создание языка Java 37Связь с языком C# 39

Каким образом язык Java изменил Интернет 40Аплеты на Java 40Безопасность 41Переносимость 41

Чудо Java: байт-код 41Сервлеты: серверные программы на Java 43Отличительные особенности Java 43

Простота 44Объектная ориентированность 44Надежность 44Многопоточность 45Архитектурная нейтральность 45Интерпретируемость и высокая производительность 46Распределенность 46Динамичность 46

Эволюция языка Java 46Версия Java SE 8 50Культура нововведений 51

Глава2.КраткийобзорJava 53Объектно-ориентированное программирование 53

Две методики 53Абстракция 54Три принципа ООП 54

Содержание

Java 8 book.indb 6 15.01.2015 2:29:42

Page 2: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

Содержание 7

Первый пример простой программы 60Ввод кода программы 61Компиляция программы 61Подробный анализ первого примера программы 62

Второй пример короткой программы 65Два управляющих оператора 66

Условный оператор if 67Оператор цикла for 68

Использование блоков кода 69Вопросы лексики 70

Пробелы 71Идентификаторы 71Литералы 71Комментарии 72Разделители 72Ключевые слова Java 72

Библиотеки классов Java 73

Глава3.Типыданных,переменныеимассивы 75Java — строго типизированный язык 75Примитивные типы 75Целые числа 76

Тип byte 77Тип short 77Тип int 77Тип long 78

Числа с плавающей точкой 78Тип float 79Тип double 79

Символы 80Логические значения 81Подробнее о литералах 82

Целочисленные литералы 82Литералы с плавающей точкой 84Логические литералы 85Символьные литералы 85Строковые литералы 86

Переменные 86Объявление переменной 86Динамическая инициализация 87Область и срок действия переменных 87

Преобразование и приведение типов 90Автоматическое преобразование типов в Java 90Приведение несовместимых типов 91

Автоматическое продвижение типов в выражениях 92Правила продвижения типов 93

Массивы 94Одномерные массивы 94Многомерные массивы 97Альтернативный синтаксис объявления массивов 101

Введение в символьные строки 101Замечание по поводу указателей для программирующих на C/C++ 102

Java 8 book.indb 7 15.01.2015 2:29:42

Page 3: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

8 Содержание

Глава4.Операции 103Арифметические операции 103

Основные арифметические операции 104Операция деления по модулю 105Составные арифметические операции с присваиванием 105Операции инкремента и декремента 106

Поразрядные операции 108Поразрядные логические операции 109Сдвиг влево 111Сдвиг вправо 113Беззнаковый сдвиг вправо 114Поразрядные составные операции с присваиванием 116

Операции отношения 117Логические операции 118

Укороченные логические операции 120Операция присваивания 120

Тернарная операция ? 121Предшествование операций 122Применение круглых скобок 123

Глава5.Управляющиеоператоры 125Операторы выбора 125

Условный оператор if 125Оператор switch 128

Операторы цикла 133Цикл while 133Цикл do-while 135Цикл for 138Вложенные циклы 147

Операторы перехода 147Применение оператора break 148Применение оператора continue 151Оператор return 153

Глава6.Введениевклассы 155Основы классов 155

Общая форма класса 155Простой класс 156

Объявление объектов 159Подробное рассмотрение оператора new 160

Присваивание переменным ссылок на объекты 161Введение в методы 162

Ввод метода в класс Box 163Возврат значений 164Ввод метода, принимающего параметры 166

Конструкторы 168Параметризированные конструкторы 170

Ключевое слово this 171Сокрытие переменной экземпляра 172

Сборка “мусора” 172Метод finalize() 173Класс Stack 174

Java 8 book.indb 8 15.01.2015 2:29:43

Page 4: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

Содержание 9

Глава7.Подробноерассмотрениеклассовиметодов 177Перегрузка методов 177

Перегрузка конструкторов 180Применение объектов в качестве параметров 182Подробное рассмотрение особенностей передачи аргументов 184Возврат объектов 186Рекурсия 187Введение в управление доступом 189Ключевое слово static 193Ключевое слово final 194Еще раз о массивах 195Вложенные и внутренние классы 197Краткий обзор класса String 200Применение аргументов командной строки 202Аргументы переменной длины 203

Перегрузка методов с аргументами переменной длины 206Аргументы переменной длины и неоднозначность 207

Глава8.Наследование 209Основы наследования 209

Доступ к членам класса и наследование 211Более практический пример 212Переменная суперкласса может ссылаться на объект подкласса 213

Ключевое слово super 214Вызов конструкторов суперкласса с помощью ключевого слова super 215Другое применение ключевого слова super 218

Создание многоуровневой иерархии 219Порядок вызова конструкторов 222Переопределение методов 223Динамическая диспетчеризация методов 225

Назначение переопределенных методов 226Применение переопределения методов 227

Применение абстрактных классов 228Ключевое слово final в сочетании с наследованием 231

Предотвращение переопределения с помощью ключевого слова final 231Предотвращения наследования с помощью ключевого слова final 232

Класс Object 233

Глава9.Пакетыиинтерфейсы 235Пакеты 235

Определение пакета 236Поиск пакетов и переменная окружения CLASSPATH 236Краткий пример пакета 237

Защита доступа 238Пример защиты доступа 239

Импорт пакетов 242Интерфейсы 244

Java 8 book.indb 9 15.01.2015 2:29:43

Page 5: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

10 Содержание

Объявление интерфейса 245Реализация интерфейсов 246Вложенные интерфейсы 249Применение интерфейсов 250Переменные в интерфейсах 253Расширение интерфейсов 255

Методы по умолчанию 255Основы применения методов по умолчанию 257Более практический пример 258Вопросы множественного наследования 259

Применение статических методов в интерфейсе 260Заключительные соображения по поводу пакетов и интерфейсов 261

Глава10.Обработкаисключений 263Основы обработки исключений 263Типы исключений 264Необрабатываемые исключения 265Использование блоков операторов try и catch 266

Вывод описания исключения 268Применение нескольких операторов catch 268Вложенные операторы try 270Оператор throw 272Оператор throws 273Оператор finally 275Встроенные в Java исключения 276Создание собственных подклассов исключений 278Цепочки исключений 280Недавно внедренные средства для обработки исключений 282Применение исключений 284

Глава11.Многопоточноепрограммирование 285Модель потоков исполнения в Java 286

Приоритеты потоков 287Синхронизация 288Обмен сообщениями 289Класс Thread и интерфейс Runnable 289

Главный поток исполнения 290Создание потока исполнения 291

Реализация интерфейса Runnable 292Расширение класса Thread 294Выбор способа создания потоков исполнения 295

Создание многих потоков исполнения 295Применение методов isAlive() и join() 297Приоритеты потоков исполнения 299Синхронизация 300

Применение синхронизированных методов 301Оператор synchronized 303

Взаимодействие потоков исполнения 304Взаимная блокировка 309

Java 8 book.indb 10 15.01.2015 2:29:43

Page 6: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

Содержание 11

Приостановка, возобновление и остановка потоков исполнения 311Получение состояния потока исполнения 313Применение многопоточности 315

Глава12.Перечисления,автоупаковкаианнотации(метаданные) 317Перечисления 317

Основные положения о перечислениях 317Методы values()и valueOf() 319Перечисления в Java относятся к типам классов 321Перечисления наследуются от класса Enum 323Еще один пример перечисления 325

Оболочки типов 326Класс Character 327Класс Boolean 327Оболочки числовых типов 327

Автоупаковка 328Автоупаковка и методы 329Автоупаковка и автораспаковка в выражениях 330Автоупаковка и распаковка значений из классов Boolean и Character 332Автоупаковка и автораспаковка помогают предотвратить ошибки 333Предупреждение 333

Аннотации (метаданные) 334Основы аннотирования программ 334Правила удержания аннотаций 335Получение аннотаций во время выполнения с помощью рефлексии 336Второй пример применения рефлексии 338Получение всех аннотаций 339Интерфейс AnnotatedElement 341Использование значений по умолчанию 341Аннотации-маркеры 343Одночленные аннотации 343Встроенные аннотации 345

Типовые аннотации 347Повторяющиеся аннотации 352

Некоторые ограничения на аннотации 353

Глава13.Ввод-вывод,аплетыипрочиевопросы 355Основы ввода-вывода 355

Потоки ввода-вывода 356Потоки ввода-вывода байтов и символов 356Предопределенные потоки ввода-вывода 359

Чтение данных, вводимых с консоли 359Чтение символов 360Чтение символьных строк 361

Запись данных, выводимых на консоль 362Класс PrintWriter 363Чтение и запись данных в файлы 364Автоматическое закрытие файла 370Основы создания аплетов 374

Java 8 book.indb 11 15.01.2015 2:29:43

Page 7: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

12 Содержание

Модификаторы доступа transient и volatile 377Применение оператора instanceof 378Модификатор доступа strictfp 380Платформенно-ориентированные методы 381Трудности, связанные с платформенно-ориентированными методами 384Применение ключевого слова assert 385

Параметры включения и отключения режима проверки утверждений 388

Статический импорт 388Вызов перегружаемых конструкторов по ссылке this() 391Компактные профили Java API 393

Глава14.Обобщения 395Что такое обобщения 396Простой пример обобщения 396

Обобщения действуют только со ссылочными типами 400Обобщенные типы различаются по аргументам типа 400Каким образом обобщения повышают типовую безопасность 401

Обобщенный класс с двумя параметрами типа 403Общая форма обобщенного класса 404Ограниченные типы 405Применение метасимвольных аргументов 407

Ограниченные метасимвольные аргументы 410Создание обобщенного метода 414

Обобщенные конструкторы 417Обобщенные интерфейсы 417Базовые типы и унаследованный код 420Иерархии обобщенных классов 422

Применение обобщенного суперкласса 422Обобщенный подкласс 424Сравнение типов в обобщенной иерархии во время выполнения 425Приведение типов 428Переопределение методов в обобщенном классе 428

Выведение типов и обобщения 429Стирание 431

Мостовые методы 431Ошибки неоднозначности 433Некоторые ограничения, присущие обобщениям 434

Получить экземпляр по параметру типа нельзя 434Ограничения на статические члены 435Ограничения на обобщенные массивы 435Ограничения на обобщенные исключения 436

Глава15.Лямбда-выражения 437Введение в лямбда-выражения 438

Основные положения о лямбда-выражениях 438Функциональные интерфейсы 439Некоторые примеры лямбда-выражений 440

Блочные лямбда-выражения 444Обобщенные функциональные интерфейсы 446Передача лямбда-выражений в качестве аргументов 447Лямбда-выражения и исключения 450

Java 8 book.indb 12 15.01.2015 2:29:43

Page 8: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

Содержание 13

Лямбда-выражения и захват переменных 451Ссылки на методы 453

Ссылки на статические методы 453Ссылки на методы экземпляра 454Ссылки на обобщенные методы 458

Ссылки на конструкторы 460Предопределенные функциональные интерфейсы 465

Часть II. Библиотека Java 467

Глава16.Обработкасимвольныхстрок 469Конструкторы символьных строк 470Длина символьной строки 472Специальные строковые операции 472

Строковые литералы 472Сцепление строк 473Сцепление символьных строк с другими типами данных 473Преобразование символьных строк и метод toString() 474

Извлечение символов 475Метод charAt() 475Метод getChars() 476Метод getBytes() 476Метод toCharArray() 477

Сравнение символьных строк 477Методы equals() и equalsIgnoreCase() 477Метод regionMatches() 478Методы startsWith() и endsWith() 478Метод equals() в сравнении с операцией == 479Метод compareTo() 480

Поиск в символьных строках 481Видоизменение символьных строк 482

Метод substring() 483Метод concat() 484Метод replace() 484Метод trim() 484

Преобразование данных методом valueOf() 485Изменение регистра символов в строке 486Соединение символьных строк 487Дополнительные методы из класса String 487Класс StringBuffer 489

Конструкторы класса StringBuffer 489Методы length() и capacity() 490Метод ensureCapacity() 490Метод setLength() 491Методы charAt() и setCharAt() 491Метод getChars() 492Метод append() 492Метод insert() 493Метод reverse() 493Методы delete() и deleteCharAt() 494

Java 8 book.indb 13 15.01.2015 2:29:43

Page 9: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

14 Содержание

Метод replace() 494Метод substring() 495Дополнительные методы из класса StringBuffer 495

Класс StringBuilder 496

Глава17.Пакетjava.lang 497Оболочки примитивных типов 498

Класс Number 498Классы Double и Float 498Методы isInfinite() и isNaN() 503Классы Byte, Short, Integer и Long 503Класс Character 514Дополнения класса Character для поддержки кодовых точек в Юникоде 517Класс Boolean 519

Класс Void 520Класс Process 520Класс Runtime 521

Управление памятью 523Выполнение других программ 524

Класс ProcessBuilder 525Класс System 528

Измерение времени выполнения программы методом currentTimeMills() 530Применение метода arraycopy() 531Свойства окружения 532

Класс Object 532Применение метода clone() и интерфейса Cloneable 533Класс Class 535Класс ClassLoader 538Класс Math 539

Тригонометрические функции 539Экспоненциальные функции 540Функции округления 540Прочие методы из класса Math 542

Класс StrictMath 544Класс Compiler 545Классы Thread, ThreadGroup и интерфейс Runnable 545

Интерфейс Runnable 545Класс Thread 545Класс ThreadGroup 548

Классы ThreadLocal и InheritableThreadLocal 553Класс Package 553Класс RuntimePermission 555Класс Throwable 555Класс SecurityManager 555Класс StackTraceElement 555Класс Enum 556Класс ClassValue 557Интерфейс CharSequence 558Интерфейс Comparable 558Интерфейс Appendable 559

Java 8 book.indb 14 15.01.2015 2:29:43

Page 10: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

Содержание 15

Интерфейс Iterable 559Интерфейс Readable 560Интерфейс AutoCloseable 560Интерфейс Thread.UncaughtExceptionHandler 560Подпакеты из пакета в java.lang 561

Пакет java.lang.annotation 561Пакет java.lang.instrument 561Пакет java.lang.invoke 561Пакет java.lang.management 561Пакет java.lang.ref 562Пакет java.lang.reflect 562

Глава18.Пакетjava.util,частьI.CollectionsFramework 563Краткий обзор коллекций 564Изменения каркаса коллекций в версии JDK 5 566

Обобщения коренным образом изменили каркас коллекций 566В средствах автоматической упаковки используются примитивные типы данных 567Цикл for в стиле for each 567

Интерфейсы коллекций 567Интерфейс Collection 568Интерфейс List 571Интерфейс Set 573Интерфейс SortedSet 573Интерфейс NavigableSet 574Интерфейс Queue 576Интерфейс Dequeue 577

Классы коллекций 579Класс ArrayList 580Класс LinkedList 584Класс HashSet 585Класс LinkedHashSet 587Класс TreeSet 587Класс PriorityQueue 588Класс ArrayDeque 589Класс EnumSet 590

Доступ к коллекциям через итератор 591Применение интерфейса Iterator 593Цикл for в стиле for each как альтернатива итераторам 595

Итераторы-разделители 596Сохранение объектов пользовательских классов в коллекциях 599Интерфейс RandomAccess 600Обращение с отображениями 601

Интерфейсы отображений 601Классы отображений 609

Компараторы 614Применение компараторов 617

Алгоритмы коллекций 622Массивы 629Унаследованные классы и интерфейсы 634

Java 8 book.indb 15 15.01.2015 2:29:43

Page 11: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

16 Содержание

Интерфейс Enumeration 635Класс Vector 635Класс Stack 639Класс Dictionary 641Класс Properties 645Применение методов store() и load() 649

Заключительные соображения по поводу коллекций 650

Глава19.Пакетjava.util,частьII.Прочиеслужебныеклассы 651Класс StringTokenizer 651Класс BitSet 653Классы Optional, OptionalDouble, OptionalInt и OptionalLong 656Класс Date 659Класс Calendar 661Класс GregorianCalendar 664Класс TimeZone 666Класс SimpleTimeZone 667Класс Locale 668Класс Random 670Класс Observable 672

Интерфейс Observer 673Пример наблюдения за объектами 674

Классы Timer и TimerTask 676Класс Currency 678Класс Formatter 680

Конструкторы класса Formatter 680Методы из класса Formatter 681Основы форматирования 682Форматирование строк и символов 684Форматирование чисел 684Форматирование времени и даты 685Спецификаторы формата %n и %% 687Указание минимальной ширины поля 687Указание точности 689Применение признаков формата 689Выравнивание выводимых данных 690Признаки пробела, +, 0 и ( 691Признак запятой 692Признак # 692Прописные формы спецификаторов формата 692Применение индекса аргумента 693Закрытие объекта типа Formatter 694Аналог функции printf() в Java 695

Класс Scanner 695Конструкторы класса Scanner 695Некоторые примеры применения класса Scanner 700Установка разделителей 704Прочие средства класса Scanner 705

Классы ResourceBundle, ListResourceBundle и PropertyResourceBundle 706

Java 8 book.indb 16 15.01.2015 2:29:43

Page 12: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

Содержание 17

Прочие служебные классы и интерфейсы 710Пакеты java.util.concurrent, java.util.concurrent. atomic, java.util.concurrent.locks 712Пакет java.util.function 712Пакет java.util.jar 716Пакет java.util.logging 716Пакет java.util.prefs 716Пакет java.util.regex 716Пакет java.util.spi 716Пакет java.util.stream 716Пакет java.util.zip 716

Глава20.Пакетjava.ioдляввода-вывода 717Классы и интерфейсы ввода-вывода 718Класс File 718

Каталоги 722Применение интерфейса FilenameFilter 723Альтернативный метод listFiles() 724Создание каталогов 724

Интерфейсы AutoCloseable, Closeable и Flushable 724Исключения ввода-вывода 725Два способа закрытия потока ввода-вывода 726Классы потоков ввода-вывода 727Потоки ввода-вывода байтов 728

Класс InputStream 728Класс OutputStream 729Класс FileInputStream 730Класс FileOutputStream 732Класс ByteArrayInputStream 734Класс ByteArrayOutputStream 736Фильтруемые потоки ввода-вывода байтов 737Буферизованные потоки ввода-вывода байтов 737

Потоки ввода-вывода символов 748Класс Reader 749Класс Writer 750Класс FileReader 751Класс FileWriter 751Класс CharArrayReader 752Класс CharArrayWriter 754Класс BufferedReader 755Класс BufferedWriter 756Класс PushbackReader 757Класс PrintWriter 758

Класс Console 759Сериализация 761

Интерфейс Serializable 762Интерфейс Externalizable 762Интерфейс ObjectOutput 763Класс ObjectOutputStream 763Интерфейс ObjectInput 764

Java 8 book.indb 17 15.01.2015 2:29:43

Page 13: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

18 Содержание

Класс ObjectInputStream 765Пример сериализации 767

Преимущества потоков ввода-вывода 768

Глава21.Системаввода-выводаNIO 769Классы системы ввода-вывода NIO 769Основные положения о системе ввода-вывода NIO 770

Буфера 770Каналы 772Наборы символов и селекторы 774

Усовершенствования в системе NIO, начиная с версии JDK 7 774Интерфейс Path 774Класс Files 776Класс Paths 779Интерфейсы атрибутов файлов 780Классы FileSystem, FileSystems и FileStore 782

Применение системы ввода-вывода NIO 782Применение системы NIO для канального ввода-вывода 783Применение системы NIO для потокового ввода-вывода 793Применение системы ввода-вывода NIO для операций в файловой системе 796

Примеры организации канального ввода-вывода до версии JDK 7 804Чтение из файла до версии JDK 7 804Запись в файл версии до JDK 7 807

Глава22.Работавсети 811Основы работы в сети 811Сетевые классы и интерфейсы 813Класс InetAddress 813

Фабричные методы 814Методы экземпляра 815

Классы Inet4Address и Inet6Address 815Клиентские сокеты по протоколу TCP/IP 816Класс URL 819Класс URLConnection 821Класс HttpURLConnection 824Класс URI 826Cookie-файлы 826Серверные сокеты по протоколу TCP/IP 827Дейтаграммы 827

Класс DatagramSocket 828Класс DatagramPacket 829Пример обработки дейтаграмм 830

Глава23.КлассApplet 833Два типа аплетов 833Основы разработки аплетов 834

Класс Applet 835Структура аплетов 837Скелет аплета 838

Инициализация и прекращение работы аплета 839

Java 8 book.indb 18 15.01.2015 2:29:43

Page 14: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

Содержание 19

Переопределение метода update() 840Простые методы воспроизведения аплетов 841Запрос на повторное воспроизведение 843

Простой аплет с баннером 844Применение строки состояния 846HTML-дескриптор APPLET 847Передача параметров аплетам 848

Усовершенствование аплета, воспроизводящего баннер 850Методы getDocumentBase() и getCodeBase() 851Интерфейс AppletContext и метод showDocument() 852Интерфейс AudioClip 854Интерфейс AppletStub 854Консольный вывод 854

Глава24.Обработкасобытий 855Два механизма обработки событий 855Модель делегирования событий 856

События 856Источники событий 857Приемники событий 857

Классы событий 858Класс ActionEvent 859Класс AdjustmentEvent 860Класс ComponentEvent 861Класс ContainerEvent 861Класс FocusEvent 862Класс InputEvent 863Класс ItemEvent 864Класс KeyEvent 864Класс MouseEvent 865Класс MouseWheelEvent 867Класс TextEvent 868Класс WindowEvent 868

Источники событий 870Интерфейсы приемников событий 870

Интерфейс ActionListener 871Интерфейс AdjustmentListener 871Интерфейс ComponentListener 872Интерфейс ContainerListener 872Интерфейс FocusListener 872Интерфейс ItemListener 872Интерфейс KeyListener 872Интерфейс MouseListener 873Интерфейс MouseMotionListener 873Интерфейс MouseWheelListener 873Интерфейс TextListener 873Интерфейс WindowFocusListener 873Интерфейс WindowListener 873

Применение модели делегирования событий 874Обработка событий от мыши 874Обработка событий от клавиатуры 877

Java 8 book.indb 19 15.01.2015 2:29:43

Page 15: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

20 Содержание

Классы адаптеров 880Внутренние классы 882

Анонимные внутренние классы 883

Глава25.ВведениевбиблиотекуAWT:работасокнами,графикойитекстом 885

Классы библиотеки AWT 886Основные положения об окнах 888

Класс Component 889Класс Container 889Класс Panel 889Класс Window 890Класс Frame 890Класс Canvas 890

Работа с обрамляющими окнами 890Установка размеров окна 891Сокрытие и отображение окна 891Установка заголовка окна 891Закрытие обрамляющего окна 891

Создание обрамляющего окна в аплете, построенном на основе библиотеки AWT 892

Обработка событий в обрамляющем окне 894Создание оконной прикладной программы 898Отображение информации в окне 899

Поддержка графики 900Рисование линий 900Рисование прямоугольников 900Рисование эллипсов и окружностей 901Рисование дуг 901Рисование многоугольников 901Демонстрация методов рисования 902Изменение размеров графики 902

Работа с цветом 904Методы из класса Color 905

Установка режима рисования 907Работа со шрифтами 909

Определение доступных шрифтов 910Создание и выбор шрифта 911Получение сведений о шрифте 913

Управление форматированием выводимого текста 914Отображение многострочного текста 915Центровка текста 917Выравнивание многострочного текста 918

Глава26.Применениеэлементовуправления,диспетчеровкомпоновкиименюизбиблиотекиAWT 923

Основные положения об элементах управления 924Ввод и удаление элементов управления 924Реагирование на элементы управления 925Исключение типа HeadlessException 925

Java 8 book.indb 20 15.01.2015 2:29:43

Page 16: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

Содержание 21

Метки 925Экранные кнопки 926

Обработка событий от кнопок 927Флажки 930

Обработка событий от флажков 931Кнопки-переключатели 932Элементы управления выбором 934

Обработка событий от раскрывающихся списков 935Использование списков 936

Обработка событий от списков 938Управление полосами прокрутки 939

Обработка событий от полос прокрутки 941Текстовые поля 943

Обработка событий в текстовых полях 944Текстовые области 945Диспетчеры компоновки 947

Класс FlowLayout 948Класс BorderLayout 950Вставки 952Класс GridLayout 953Класс CardLayout 954Класс GridBagLayout 957

Меню и строки меню 962Диалоговые окна 968Диалоговые окна выбора файлов 972О переопределении метода paint() 973

Глава27.Изображения 975Форматы файлов 975Основы работы с изображениями: создание, загрузка и отображение 976

Создание объекта класса Image 976Загрузка изображения 977Воспроизведение изображения 977

Интерфейс ImageObserver 979Двойная буферизация 980Класс MediaTracker 983Интерфейс ImageProducer 986

Класс MemoryImageSource 986Интерфейс ImageConsumer 988

Класс PixelGrabber 988Класс ImageFilter 991

Класс CropImageFilter 991Фильтр класса RGBImageFilter 992

Дополнительные классы для формирования изображений 1004

Глава28.Утилитыпараллелизма 1005Пакеты параллельного API 1006

Пакет java.util.concurrent.atomic 1008Пакет java.util.concurrent.locks 1008

Применение объектов синхронизации 1008

Java 8 book.indb 21 15.01.2015 2:29:43

Page 17: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

22 Содержание

Класс Semaphore 1008Класс CountDownLatch 1014Класс CyclicBarrier 1016Класс Exchanger 1018

Класс Phaser 1020Применение исполнителя 1028

Простой пример исполнителя 1029Применение интерфейсов Callable и Future 1031

Перечисление TimeUnit 1034Параллельные коллекции 1035Блокировки 1036Атомарные операции 1039Параллельное программирование средствами Fork/Join Framework 1040

Основные классы Fork/Join Framework 1041Стратегия “разделяй и властвуй” 1045Первый простой пример вилочного соединения 1047Влияние уровня параллелизма 1049Пример применения класса RecursiveTask<V> 1053Асинхронное выполнение задач 1055Отмена задачи 1056Определение состояния завершения задачи 1056Перезапуск задачи 1056Предмет дальнейшего изучения 1057Рекомендации относительно вилочного соединения 1059

Утилиты параллелизма в сравнении с традиционным подходом к многозадачности в Java 1059

Глава29.ПотоковыйAPI 1061Основные положения о потоках данных 1061

Потоковые интерфейсы 1062Получение потока данных 1065Простой пример потока данных 1066

Операции сведения 1070Параллельные потоки данных 1073Отображение 1075Накопление 1079Итераторы и потоки данных 1083

Применение итератора в потоке данных 1083Применение итератора-разделителя 1085

Дальнейшее изучение потокового API 1087

Глава30.Регулярныевыраженияидругиепакеты 1089Пакеты из базового API 1089Обработка регулярных выражений 1092

Класс Pattern 1092Класс Matcher 1092Синтаксис регулярных выражений 1093Примеры, демонстрирующие совпадение с шаблоном 1094Два варианта сопоставления с шаблоном 1100Дальнейшее изучение регулярных выражений 1100

Рефлексия 1101

Java 8 book.indb 22 15.01.2015 2:29:43

Page 18: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

Содержание 23

Удаленный вызов методов 1105Простое приложение “клиент–сервер”, использующее механизм RMI 1105

Форматирование даты и времени средствами пакета java.text 1109Класс DateFormat 1109Класс SimpledateFormat 1111

API даты и времени, внедренный в версии JDK 8 1113Основные классы даты и времени 1113Форматирование даты и времени 1115Синтаксический анализ символьных строк даты и времени 1117Дальнейшее изучение пакета java.time 1118

Часть III. Введение в программирование ГПИ средствами Swing 1119

Глава31.ВведениевбиблиотекуSwing 1121Происхождение библиотеки Swing 1121Построение библиотеки Swing на основе библиотеки AWT 1122Главные особенности библиотеки Swing 1122

Легковесные компоненты Swing 1123Подключаемый стиль оформления 1123Связь с архитектурой MVC 1124

Компоненты и контейнеры 1125Компоненты 1125Контейнеры 1126Панели контейнеров верхнего уровня 1126

Пакеты библиотеки Swing 1127Простое Swing-приложение 1127Обработка событий 1132Создание Swing-аплета 1135Рисование средствами Swing 1138

Основы рисования 1138Вычисление области рисования 1139Пример рисования 1140

Глава32.ИсследованиебиблиотекиSwing 1143Классы JLabel и ImageIcon 1143Класс JTextField 1145Кнопки из библиотеки Swing 1147

Класс JButton 1148Класс JToggleButton 1150Флажки 1153Кнопки-переключатели 1155

Класс JTabbedPane 1157Класс JScrollPane 1160Класс JList 1162Класс JComboBox 1166Деревья 1168Класс JTable 1172Основные положения о меню 1175

Java 8 book.indb 23 15.01.2015 2:29:44

Page 19: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

24 Содержание

Глава33.ВведениевменюSwing 1175Краткий обзор классов JMenuBar, JMenu и JMenuItem 1177

Класс JMenuBar 1177Класс JMenu 1178Класс JMenuItem 1180

Создание главного меню 1180Ввод мнемоники и оперативных клавиш в меню 1184Ввод изображений и всплывающих подсказок в пункты меню 1187Классы JRadioButtonMenuItem и JCheckBoxMenuItem 1188Создание всплывающего меню 1190Создание панели инструментов 1193Действия 1196Составление окончательного варианта программы MenuDemo 1202Дальнейшее изучение библиотеки Swing 1208

Часть IV. Введение в программирование ГПИ средствами JavaFX 1209

Глава34.ВведениевJavaFX 1211Основные понятия JavaFX 1212

Пакеты JavaFX 1212Классы подмостков и сцены 1213Узлы и графы сцены 1213Компоновки 1213Класс приложения и методы его жизненного цикла 1214Запуск JavaFX-приложения 1214

Скелет JavaFX-приложения 1215Компиляция и выполнение JavaFX-приложения 1218Поток исполнения приложения 1219Метка — простейший элемент управления в JavaFX 1219Применение кнопок и событий 1221

Основы обработки событий в JavaFX 1222Элемент управления экранной кнопкой 1223Демонстрация обработки событий на примере экранных кнопок 1224

Рисование непосредственно на холсте 1227

Глава35.ЭлементыуправленияJavaFX 1233Классы Image и ImageView 1233

Ввод изображения в метку 1236Применение изображения в экранной кнопке 1238

Класс ToggleButton 1240Класс RadioButton 1243

Обработка событий изменения в группе кнопок-переключателей 1246Другой способ управления кнопками-переключателями 1248

Класс CheckBox 1251Класс ListView 1254

Представление списка с полосами прокрутки 1258Активизация режима одновременного выбора нескольких элементов из списка 1258

Класс ComboBox 1260Класс TextField 1263Класс ScrollPane 1265Класс TreeView 1269

Java 8 book.indb 24 15.01.2015 2:29:44

Page 20: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

Содержание 25

Эффекты и преобразования 1273Эффекты 1274Преобразования 1275Демонстрация эффектов и преобразований 1276

Ввод всплывающих подсказок 1279Отключение элементов управления 1280

Глава36.ВведениевменюJavaFX 1281Основные положения о меню 1281Краткий обзор классов MenuBar, Menu и MenuItem 1283

Класс MenuBar 1283Класс Menu 1284Класс MenuItem 1285

Создание главного меню 1286Ввод мнемоники и оперативных клавиш в меню 1291Ввод изображений в пункты меню 1293Классы RadioMenuItem и CheckMenuItem 1294Создание контекстного меню 1296Создание панели инструментов 1300Составление окончательного варианта приложения MenuDemo 1302Дальнейшее изучение JavaFX 1308

Часть V. Применение Java 1309

Глава37.КомпонентыJavaBeans 1311Общее представление о компонентах Java Beans 1311Преимущества компонентов Java Beans 1312Самоанализ 1312

Шаблоны проектирования для свойств компонентов Java Beans 1313Шаблоны проектирования для событий 1314Методы и шаблоны проектирования 1315Применение интерфейса BeanInfo 1315

Привязанные и ограниченные свойства 1315Сохраняемость компонентов Java Beans 1316Настройщики 1316Прикладной программный интерфейс Java Beans API 1317

Класс Introspector 1319Класс PropertyDescriptor 1319Класс EventSetDescriptor 1319Класс MethodDescriptor 1319

Пример компонента Java Bean 1320

Глава38.Введениевсервлеты 1323Предпосылки для разработки сервлетов 1323Жизненный цикл сервлета 1324Варианты разработки сервлетов 1325Применение контейнера сервлетов Tomcat 1325Простой пример сервлета 1327

Создание и компиляция исходного кода сервлета 1327Запуск контейнера сервлетов Tomcat на выполнение 1328Запуск веб-браузера и запрос сервлета 1328

Java 8 book.indb 25 15.01.2015 2:29:44

Page 21: Содержание · Подпакеты из пакета в java.lang 561 Пакет java.lang.annotation 561 Пакет java.lang.instrument 561 Пакет java.lang.invoke 561

26 Содержание

Прикладной программный интерфейс Servlet API 1329Пакет javax.servlet 1329

Интерфейс Servlet 1330Интерфейс ServletConfig 1330Интерфейс ServletContext 1331Интерфейс ServletRequest 1331Интерфейс ServletResponce 1332Класс GenericServlet 1333Класс ServletInputStream 1333Класс ServletOutputStream 1333Класс ServletException 1333

Ввод параметров сервлета 1334Пакет javax.servlet.http 1335

Интерфейс HttpServletRequest 1336Интерфейс HttpServletResponse 1337Интерфейс HttpSession 1338Класс Cookie 1339Класс HttpServlet 1340

Обработка HTTP-запросов и ответов HTTP 1341Обработка HTTP-запросов типа GET 1341Обработка HTTP-запросов типа POST 1342

Применение cookie-файлов 1343Отслеживание сеансов связи 1346

ПриложениеA.ПрименениедокументирующихкомментариеввJava 1347

Дескрипторы утилиты javadoc 1347Дескриптор $author 1348Дескриптор {@code} 1349Дескриптор @deprecated 1349Дескриптор {@docRoot} 1349Дескриптор @exception 1349Дескриптор {@inheritDoc} 1349Дескриптор {@link} 1350Дескриптор {@linkplain} 1350Дескриптор {@literal} 1350Дескриптор @param 1350Дескриптор @return 1350Дескриптор @see 1350Дескриптор @serial 1351Дескриптор @serialData 1351Дескриптор @serialField 1351Дескриптор @since 1351Дескриптор @throws 1352Дескриптор {@value} 1352Дескриптор @version 1352

Общая форма документирующих комментариев 1352Результаты, выводимые утилитой javadoc 1353Пример применения документирующих комментариев 1353

Предметныйуказатель 1355

Java 8 book.indb 26 15.01.2015 2:29:44