Это обновленное издание не только помогает опытным программистам на Java извлечь наибольшую пользу из версий Java 9-11, но и служит удобным учебным пособием для начинающих разработчиков. На многочисленных примерах кода в этом тщательно пересмотренном издании демонстрируется, как воспользоваться в полной мере современными интерфейсами API и нормами передовой практики разработки прикладных программ на Java. Оно содержит также дополнительный материал по модульной системе на платформе Java.
В части I представлено динамичное, но совсем не поверхностное введение в язык программирования Java и особенности базовой исполняющей среды на платформе Java. В части II описываются самые современные инструментальные средства, входящие в состав комплекта поставки Java.
Эта книга поможет вам в следующем:
Ускоренно овладеть языковыми средствами Java, включая изменения, внесенные в версиях Java 9-11.
Изучить принципы объектно-ориентированного программирования, используя основы синтаксиса Java.
Усвоить особенности обобщений, перечислений, аннотаций и лямбда-выражений.
Овладеть основными методами, применяемыми в объектно-ориентированном проектировании.
Author(s): Эванс Бенджамин Дж., Флэнаган Дэвид.
Edition: 7-е изд.
Publisher: Диалектика
Year: 2019
Language: Russian
Pages: 586
City: СПб.
Содержание......Page 7
Посвящение......Page 18
Предисловие......Page 19
Изменения в седьмом издании......Page 20
Краткое содержание книги......Page 21
Условные обозначения, принятые в книге......Page 24
Благодарности......Page 26
Об авторах......Page 27
Об изображении на обложке......Page 28
От издательства......Page 29
Часть I. Введение в Java......Page 30
Язык, виртуальная машина и экосистема Java......Page 32
Что собой представляет язык Java......Page 34
Что такое JVM......Page 35
Что такое экосистема Java......Page 37
Краткая история развития Java......Page 39
Часто задаваемые вопросы......Page 42
Сравнение Java с другими языками программирования......Page 45
Сравнение Java с языком Python......Page 46
Чрезмерная многословность......Page 47
Медленность изменений......Page 48
Проблемы производительности......Page 49
Чрезмерная корпоративность......Page 50
Глава 2. Основы синтаксиса Java......Page 52
Анализ программ на Java по нисходящей......Page 53
Набор символов в Юникоде......Page 54
Комментарии......Page 55
Идентификаторы......Page 57
Примитивные типы данных......Page 59
Тип boolean......Page 60
Тип char......Page 61
Целочисленные типы данных......Page 64
Числовые типы с плавающей точкой......Page 66
Взаимные преобразования примитивных типов данных......Page 69
Выражения и операции......Page 71
Краткая сводка операций......Page 72
Арифметические операции......Page 79
Операции инкремента и декремента......Page 81
Операции сравнения......Page 82
Логические операции......Page 84
Поразрядные логические операции и операции сдвига......Page 86
Операции присваивания......Page 89
Условная операция......Page 91
Операция instanceof......Page 92
Специальные операции......Page 93
Операторы......Page 95
Операторы-выражения......Page 96
Операторы с меткой......Page 97
Операторы объявления локальных переменных......Page 98
Условный оператор if/else......Page 100
Оператор switch......Page 103
Оператор while......Page 105
Оператор do while......Page 106
Оператор for......Page 107
Цикл типа foreach......Page 109
Оператор break......Page 111
Оператор continue......Page 112
Оператор synchronized......Page 113
Оператор throw......Page 115
Блок операторов try/catch/finally......Page 116
Оператор try с ресурсами......Page 120
Оператор assert......Page 121
Определение методов......Page 123
Модификаторы доступа к методам......Page 127
Проверяемые и непроверяемые исключения......Page 129
Списки аргументов переменной длины......Page 131
Определение класса......Page 133
Создание объекта......Page 134
Применение объектов......Page 135
Объектные литералы......Page 136
Лямбда-выражения......Page 137
Массивы......Page 138
Типы массивов......Page 139
Создание и инициализация массивов......Page 142
Применение массивов......Page 143
Многомерные массивы......Page 147
Сравнение ссылочных типов с примитивными типами......Page 149
Манипулирование объектами и копиями ссылок......Page 150
Сравнение объектов......Page 153
Упаковочные и распаковочные преобразования......Page 154
Пакеты и пространство имен в Java......Page 155
Объявление пакета......Page 156
Импорт ссылочных типов......Page 157
Импорт статических членов......Page 160
Структура исходного файла Java......Page 162
Определение и выполнение программ на Java......Page 164
Резюме......Page 165
Краткий обзор классов......Page 166
Основные определения ООП......Page 167
Другие ссылочные типы......Page 168
Синтаксис определения класса......Page 169
Поля и методы......Page 170
Синтаксис объявления полей......Page 171
Поля класса......Page 172
Методы класса......Page 173
Методы экземпляра......Page 175
Принцип действия ссылки this......Page 176
Определение конструктора......Page 178
Определение нескольких конструкторов......Page 179
Вызов одного конструктора из другого......Page 180
Устанавливаемые по умолчанию значения и инициализаторы полей......Page 181
Подклассы и наследование......Page 183
Расширение класса......Page 184
Суперклассы, класс Object и иерархия классов......Page 186
Конструкторы подклассов......Page 187
Вызов конструкторов по цепочке и конструктор по умолчанию......Page 188
Сокрытие полей суперкласса......Page 190
Переопределение методов из суперкласса......Page 192
Сокрытие данных и инкапсуляция......Page 199
Управление доступом......Page 200
Методы доступа к данным......Page 206
Абстрактные классы и методы......Page 209
Преобразования ссылочных типов......Page 212
Краткие итоги по модификаторам доступа......Page 215
Глава 4. Система типов Java......Page 218
Интерфейсы......Page 219
Определение интерфейса......Page 220
Расширение интерфейсов......Page 221
Реализация интерфейса......Page 222
Методы с реализацией по умолчанию......Page 225
Маркерные интерфейсы......Page 230
Введение в обобщения......Page 231
Обобщенные типы и параметры типа......Page 233
Ромбовидный синтаксис......Page 234
Стирание типов......Page 235
Ограничение параметров типа......Page 236
Введение в ковариантность......Page 238
Подстановки......Page 240
Обобщенные методы......Page 244
Статическая и динамическая типизация......Page 245
Перечисления и аннотации......Page 246
Перечисления......Page 247
Аннотации......Page 249
Определение специальных аннотаций......Page 250
Лямбда-выражения......Page 252
Преобразование лямбда-выражений......Page 254
Ссылки на методы......Page 256
Функциональное программирование......Page 258
Лексическая область видимости и локальные переменные......Page 260
Вложенные типы данных......Page 263
Статические типы членов......Page 265
Нестатические типы членов......Page 268
Локальные классы......Page 271
Анонимные классы......Page 275
Необозначаемые типы и выводимый тип var......Page 277
Резюме......Page 279
Значения в Java......Page 282
Основные методы из класса java.lang.Object......Page 284
Метод hashCode()......Page 287
Метод Comparable::compareTo()......Page 289
Особенности объектно-ориентированного проектирования......Page 290
Интерфейсы в сравнении с абстрактными классами......Page 291
Допустимо ли использовать методы с реализацией по умолчанию как трейты?......Page 294
Методы экземпляра или методы класса?......Page 295
Композиция в сравнении с наследованием......Page 297
Наследование полей и методы доступа......Page 300
Шаблон “Одиночка”......Page 303
Объектно-ориентированное проектирование с помощью лямбда-выражений......Page 305
Вложенные классы и лямбда-выражения......Page 306
Лямбда-выражения в сравнении со ссылками на методы......Page 307
Исключения и их обработка......Page 308
Безопасное программирование на Java......Page 311
Основные принципы управления оперативной памятью в Java......Page 314
Утечки памяти в Java......Page 315
Введение в алгоритм маркировки и очистки......Page 316
Простой алгоритм маркировки и очистки......Page 318
Оптимизация сборки “мусора” в JVM......Page 320
Эвакуация......Page 321
“Куча” в виртуальной машине HotSpot JVM......Page 324
Другие сборщики “мусора”......Page 327
Полное завершение......Page 329
Подробное описание полного завершения......Page 331
Поддержка параллелизма в Java......Page 333
Жизненный цикл потока исполнения......Page 335
Доступность и изменяемость......Page 337
Исключение и защита состояния......Page 339
Ключевое слово volatile......Page 343
Полезные методы из класса Thread......Page 345
Не рекомендованные для применения методы из класса Thread......Page 347
Работа с потоками исполнения......Page 348
Резюме......Page 350
Часть II. Работа с платформой Java......Page 352
Соглашения по именованию и выделению прописными буквами......Page 354
Именование на практике......Page 357
Документирующие комментарии в Java......Page 359
Структура документирующего комментария......Page 360
Дескрипторы документирующих комментариев......Page 362
Дескрипторы, встраиваемые в документирующие комментарии......Page 366
Перекрестные ссылки в документирующих комментариях......Page 368
Доклеты......Page 371
Соглашения по переносимым программам......Page 372
Введение в прикладной интерфейс API для коллекций......Page 376
Интерфейс Collection......Page 377
Интерфейс Set......Page 380
Интерфейс List......Page 383
Интерфейс Map......Page 390
Интерфейсы Queue и BlockingQueue......Page 396
Удаление элементов из очереди......Page 397
Служебные методы......Page 399
Массивы и вспомогательные методы......Page 402
Потоки данных и лямбда-выражения в Java......Page 404
Функциональные подходы к программированию......Page 405
Прикладной интерфейс Streams API......Page 410
Резюме......Page 415
Текст......Page 416
Специальный синтаксис для символьных строк......Page 417
Неизменяемость символьных строк......Page 419
Регулярные выражения......Page 422
Представление целочисленных типов данных в Java......Page 426
Представление чисел с плавающей точкой в Java......Page 428
Стандартная библиотека Java для математических функций......Page 431
Введение в прикладной интерфейс API даты и времени в версии Java 8......Page 434
Запросы......Page 438
Корректоры дат......Page 440
Устаревшая поддержка даты и времени......Page 441
Резюме......Page 442
Классический ввод-вывод в Java......Page 444
Файлы......Page 445
Потоки ввода-вывода......Page 447
Потоки чтения и записи......Page 448
Еще раз об операторе try с ресурсами......Page 450
Недостатки классической организации ввода-вывода......Page 451
Файлы......Page 452
Путь......Page 454
Каналы и буфера системы ввода-вывода NIO......Page 457
Отображаемые буфера байтов......Page 460
Стиль на основе будущих действий......Page 461
Стиль на основе обратных вызовов......Page 462
Службы наблюдения и поиска в каталогах......Page 463
Протокол HTTP......Page 465
Протокол TCP......Page 468
Протокол IP......Page 471
Примеры объектов классов......Page 474
Объекты классов и метаданные......Page 475
Загрузка......Page 477
Верификация......Page 478
Инициализация......Page 479
Безопасное программирование и загрузка классов......Page 480
Прикладная загрузка классов......Page 482
Иерархия загрузчиков классов......Page 484
Когда следует пользоваться рефлексией......Page 487
Как пользоваться рефлексией......Page 488
Динамические прокси-классы......Page 492
Тип метода......Page 494
Поиск метода......Page 495
Вызов дескрипторов методов......Page 497
Глава 12. Модули на платформе Java......Page 500
Зачем нужны модули......Page 501
Модуляризация комплекта JDK......Page 502
Основной синтаксис модулей......Page 506
Построение простого модульного приложения......Page 507
Путь к модулям......Page 509
Открытые модули......Page 510
Службы......Page 512
Многоверсионные архивные JAR-файлы......Page 513
Преобразование в многоверсионный архивный JAR-файл......Page 515
Переход на модульную платформу......Page 516
Специальные образы файлов на стадии выполнения......Page 518
Класс Unsafe и затруднения, связанные с ним......Page 519
Медленные темпы внедрения......Page 521
Резюме......Page 523
Инструментальные средства командной строки......Page 524
Утилита javac......Page 525
Утилита java......Page 527
Утилита jar......Page 530
Утилита javadoc......Page 531
Утилита jdeps......Page 532
Утилита jstat......Page 534
Утилита jstatd......Page 535
Утилита jinfo......Page 536
Утилита jstack......Page 537
Утилита jmap......Page 538
Утилита javap......Page 539
Утилита jlink......Page 540
Утилита jmod......Page 542
Введение в утилиту jshell......Page 543
Резюме......Page 547
Введение в Nashorn......Page 548
Поддержка других языков в JVM......Page 549
Побудительные причины......Page 550
Выполнение сценариев JavaScript из командной строки......Page 551
Применение оболочки Nashorn......Page 552
Применение javax.script вместе с Nashorn......Page 554
Обращение к Java из Nashorn......Page 557
Расширения языка JavaScript в Nashorn......Page 561
Внутренний механизм действия Nashorn......Page 563
Будущее Nashorn и GraalVM......Page 564
VisualVM......Page 567
Предметный указатель......Page 574