Java 9

Для быстрого ознакомления и миграции.

Кишори Шаран «Java 9. Полный обзор нововведений» ДМК Пресс, 2018 год, 544 стр., ISBN 978-5-97060-575-2; (13,8 мб. pdf)

В книге рассмотрены все нововведения в Java 9. Приведена разработка приложений с использованием системы модулей. Описаны измененная модульная структура образа среды выполнения JDK/JRE, новые фабричные методы для создания коллекций, уведомления процессора об активном ожидании с целью оптимизации потребления ресурсов, новый API платформенно-зависимого рабочего стола, API реактивных потоков и др. Уделено внимание несовместимым изменениям в JDK 9 по сравнению с JDK 8. Также рассказано об оболочке JShell, предназначенной для быстрого создания прототипа. Издание адресовано опытным Java-разработчикам, которым необходима миграция от Java 7 и 8 к Java 9.

Оглавление книги

Содержание.

Глава 1. Введение 17
Введение в JDK 9 17
Как читать эту книгу 18
Требования к системе 20
Установка NetBeans IDE 21
Скачивание исходного кода 21

Глава 2. Система модулей 23
Жизнь до Java 9 23
Новая система модулей 25
Что такое модуль? 26
Зависимости модулей 27
Граф модулей 29
Модули-агрегаторы 33
Объявление модулей 34
Имена модулей 35
Контроль доступа к модулям 35
Объявление зависимости 37
Конфигурирование служб 37
Дескрипторы модулей 38
Компиляция объявлений модулей 38
Версия модуля 38
Структура исходных файлов модуля 39
Упаковка модулей 40
Хранение модуля в каталоге 40
Хранение модуля в модульном JAR-файле 40
Хранение модуля в JMOD-файле 41
Путь к модулям 41
Видимые модули 43
Резюме 45

Глава 3. Создаем свой первый модуль 47
Работа с инструментами командной строки 47
Подготовка каталогов 47
Написание исходного кода 48
Компиляция исходного кода 49
Упаковка кода модуля 51
Выполнение программы 52
Работа с NetBeans IDE 54
Настройка IDE 54
Создание проекта Java 58
Задание свойств проекта 60
Добавление объявления модуля 62
Просмотр графа модуля 64
Написание исходного кода 64
Компиляция исходного кода 65
Упаковка кода модуля 66
Выполнение программы 67
Резюме 69

Глава 4. Зависимости модулей 70
Объявление зависимостей модуля 70
Исправление возможных ошибок 78
Пустой пакет 78
Модуль не найден 78
Пакет не существует 78
Исключение при разрешении модуля 79
Неявное чтение 79
Квалифицированный экспорт 83
Факультативная зависимость 85
Доступ к модулям с помощью рефлексии 86
Раскрытые модули 87
Раскрытие пакетов 87
Использование глубокой рефлексии 88
Доступность типов 96
Расщепление пакетов между несколькими модулями 97
Ограничения в объявлениях модулей 98
Типы модулей 98
Нормальные модули 99
Раскрытые модули 99
Автоматические модули 100
Безымянные модули 103
Порядок перехода на JDK 9 110
Дизассемблирование определения модуля 111
Резюме 115

Глава 5. Реализация служб 117
Что такое служба? 117
Обнаружение служб 119
Предоставление реализаций службы 120
Определение интерфейса службы 122
Определение поставщиков службы 125
Определение обычного поставщика службы простых чисел 125
Определение быстрого поставщика службы простых чисел 127
Определение самого быстрого поставщика службы простых чисел 129
Тестирование службы простых чисел 130
Выборка и фильтрация поставщиков 134
Тестирование службы простых чисел по-старому 135
Резюме 137

Глава 6. Упаковка модуля 139
Формат JAR 139
Что такое многоверсионный JAR-файл? 140
Создание многоверсионных JAR-файлов 142
Правила для многоверсионных JAR-файлов 148
Многоверсионные JAR-файлы и базовый загрузчик 150
Одинаковые файлы для разных версий JDK 150
Многоверсионные JAR-файлы и URL со схемой JAR 150
Атрибут Multi-Release в манифесте 151
Формат JMOD 151
Программа jmod 151
Создание JMOD-файлов 153
Извлечение содержимого JMOD-файла 154
Печать содержимого JMOD-файла 154
Описание JMOD-файла 155
Запись хэшей модулей 155
Резюме 158

Глава 7. Создание пользовательских образов среды выполнения 159
Что такое пользовательский образ среды выполнения? 159
Создание пользовательского образа среды выполнения 160
Связывание служб 164
Плагины команды jlink 166
Команда jimage 169
Резюме 171

Глава 8. Несовместимые изменения в JDK 9 172
Новая схема нумерации версий JDK 172
Номер версии 173
Признак предварительной версии 174
Информация о сборке 174
Дополнительная информация 174
Разбор старой и новой строки версии 175
Изменение значений системных свойств 175
Использование класса Runtime.Version 175
Изменения в JDK и JRE 179
Структурные изменения JDK и JRE 179
Изменения поведения 181
Изменения в загрузчиках классов 182
Доступ к ресурсам 186
Доступ к ресурсам до JDK 9 186
Доступ к ресурсам в JDK 9 191
Внутренние API JDK 204
Замена модуля 206
Резюме 208

Глава 9. Нарушение инкапсуляции модуля 210
Что такое нарушение инкапсуляции модуля? 210
Параметры командной строки 211
Параметр —add-exports 211
Параметр —add-opens 212
Параметр —add-reads 212
Параметр —permit-iLLegaL-access 213
Пример 214
Атрибуты манифеста JAR-файла 220
Резюме 223

Глава 10. API модулей 225
Что такое API модулей? 225
Представление модулей 227
Описание модулей 227
Представление предложений модуля 228
Представление версии модуля 230
Другие свойства модулей 231
Базовая информация о модуле 232
Запросы к модулям 235
Модификация модулей 237
Доступ к ресурсам модуля 241
Аннотации модулей 241
Загрузка классов 243
Слои модулей 246
Поиск модулей 248
Чтение содержимого модуля 250
Создание конфигураций 252
Создание слоя модулей 254
Резюме 262

Глава 11. Оболочка Java 264
Что такое оболочка Java? 264
Архитектура JSheLL 266
Запуск команды JSheLL 267
Выход из JSheLL 269
Что такое фрагменты и команды? 270
Вычисление выражений 271
Вывод списка фрагментов 273
Редактирование фрагментов 277
Повторное выполнение предыдущих фрагментов 280
Объявление переменных 280
Предложения import 283
Объявление методов 287
Объявление типов 288
Установка среды выполнения 292
Отсутствие контролируемых исключений 293
Автозавершение 294
История фрагментов и команд 297
Чтение трассы стека в JSheLL 298
Повторное использование сеансов JSheLL 299
Сброс состояния JSheLL 301
Перезагрузка состояния JSheLL 302
Конфигурирование JSheLL 305
Задание редактора фрагментов 305
Задание режима выдачи 306
Создание пользовательских режимов выдачи 308
Задание стартовых фрагментов 313
Использование документации по JSheLL 316
JSheLL API 318
Создание объекта JSheLL 319
Работа с фрагментами 320
Обработка событий фрагмента 322
Пример 322
Резюме 327

Глава 12. Изменения API процессов 328
Что такое API процессов? 328
Текущий процесс 329
Опрос состояния процесса 330
Сравнение процессов 334
Создание процесса 334
Получение описателя процесса 342
Завершение процесса 345
Управление правами процесса 345
Резюме 348

Глава 13. Изменения API коллекций 350
Общие сведения 350
Немодифицируемые списки 353
Немодифицируемые множества 356
Немодифицируемые отображения 360
Резюме 364

Глава 14. Клиентский API HTTP/2 365
Что такое клиентский API HTTP/2? 366
Настройка среды для примеров 368
Создание HTTP-клиентов 369
Обработка HTTP-запросов 370
Получение построителя HTTP-запроса 371
Задание параметров HTTP-запроса 371
Задание политики перенаправления запроса 381
Использование протокола WebSocket 382
Создание серверной оконечной точки 382
Создание клиентской оконечной точки 385
Выполнение программы 389
Устранение неполадок в приложении WebSocket 393
Резюме 394

Глава 15. Модифицированный тип Deprecated 395
Что такое нерекомендуемый API? 395
Как объявить API нерекомендуемым 395
Модификация аннотации @Deprecated в JDK 9 397
Подавление предупреждений о нерекомендованности 399
Пример нерекомендуемого API 400
Статический анализ нерекомендуемых API 405
Динамический анализ нерекомендуемых API 408
Отказ от предупреждений о нерекомендованности при импорте 409
Резюме 410

Глава 16. Навигация по стеку 411
Что такое стек? 411
Что такое навигация по стеку? 412
Навигация по стеку JDK 8 412
Недостатки навигации по стеку 415
Навигация по стеку в JDK 9 416
Параметры навигации по стеку 416
Представление кадра стека 416
Получение экземпляра StackWalker 418
Навигация по стеку 419
Получение вызывающего класса 424
Права для навигации по стеку 427
Резюме 429

Глава 17. Реактивные потоки 431
Что такое поток? 431
Что такое реактивные потоки? 432
API реактивных потоков в JDK 9 434
Взаимодействия между издателем и подписчиком 435
Создание издателя 436
Публикация данных 436
Простой пример 437
Создание подписчиков 439
Использование процессоров 445
Резюме 448

Глава 18. Изменения API потоков 450
Новые потоковые операции 450
Новые коллекторы 454
Резюме 460

Глава 19. Протоколирование на уровне платформы и JVM 461
API платформенного протоколирования 461
Подготовка библиотеки Log4j 2.0 462
Подготовка проекта NetBeans 462
Определение модуля 462
Добавление конфигурационного файла Log4j 464
Создание системного диспетчера протоколирования 465
Создание локатора диспетчера протоколирования 467
Тестирование платформенного модуля 468
Унифицированное протоколирование JVM 472
Метки сообщений 473
Уровни сообщений 474
Декораторы сообщений 474
Место назначения сообщения 475
Синтаксис параметра -XLog 476
Резюме 479

Глава 20. Другие изменения в JDK 9 481
Знак подчеркивания — ключевое слово 482
Усовершенствование блоков try с ресурсами 483
Ромбовидный оператор в анонимных классах 487
Закрытые методы в интерфейсах 490
Применение аннотации @SafeVarargs к закрытым методам 492
Отбрасывание вывода процесса 494
Новые методы класса StrictMath 496
Изменения в классе CLassLoader 498
Новые методы в классе OptionaL<T> 499
Новые методы класса CompLetabLeFuture<T> 502
Уведомления об активном ожидании 502
Улучшения в Time API 504
Класс CLock 504
Класс Duration 504
Преобразование промежутка времени и выделение его частей 505
Фабричный метод ofInstant() 507
Получение числа секунд от начала отсчета 508
Поток объектов LocaLDate 509
Новые параметры форматирования 510
Класс Scanner и потоковые операции 512
Улучшения в классе Matcher 513
Улучшения в классе Objects 515
Сравнение массивов 516
API аплетов объявлен нерекомендуемым 519
Усовершенствования в документации Java 519
Поддержка платформенного рабочего стола 522
Фильтры десериализации объектов 526
Добавления в API ввода-вывода 535
Резюме 536
Предметный указатель 539

СкачатьPDF

Похожая литература