Опубликовано

Новинка! “Java. Состояние языка и его перспективы”

Java. Состояние языка и его перспективы

Книга о современном состоянии языка Java, векторе его развития, а также о грамотном программировании в духе паттернов GoF. Книга дает базовое представление о фреймворке Spring, контейнерах Docker, принципах ООП, затрагивая, в частности, переход к облачным решениям, обращение с IDE. Также освещены темы из enterprise-разработки: файловый ввод/вывод NIO2, многопоточность, локализация, интеграция и оптимизация производительности. В книге отражено состояние языка по состоянию на версию Java 17 с разбором некоторых аспектов Java 18.

Будет интересна специалистам, возвращающимся к работе с Java после перерыва, бэкенд-разработчикам, читателям, готовящимся к сертификационным экзаменам.

Изучив предложенные примеры, Вы:

  • познакомитесь с объектно-ориентированным программированием на Java;
  • основами фреймворка Spring;
  • контейнерами Docker;
  • структурами данных;
  • идиомами программирования.

Язык Java более 20 лет занимает ведущие позиции в программировании для больших предприятий, бэкенд-разработке, банковском секторе, распределенных вычислениях. Java – ключевой язык для программирования под Android, несмотря на растущую популярность Kotlin. Виртуальная машина Java (JVM) является платформой для множества сложных и востребованных языков, прежде всего, Kotlin и Scala. Наконец, именно Java и его крупный фреймворк Spring наиболее отвечают современным вызовам, связанным с облачными и бессерверными вычислениями.  При этом в последние 5-6 лет экосистема Java меняется на глазах. В области Enterprise-разработки открыто соперничают Java EE и Jakarta EE. Каденция версий Java ускорилась, и новая мажорная версия теперь выходит примерно раз в полгода. Естественно, приходится поддерживать и актуализировать массу legacy-кода, где в лучшем случае реализованы возможности Java 8, например, лямбда-выражения.

Не будет преувеличением сказать, что в наше время даже при изучении Java с нуля необходимо держать в уме это беспокойное наследство. Типичная книга об очередной новой версии Java устареет раньше, чем выйдет из типографии. Именно поэтому давно назрела необходимость в такой книге, как эта. В ней вы усвоите основы языка, познакомитесь с принципами его версионирования и расширяемости, а также рассмотрите магистральные векторы его развития. Новейший материал книги в основном ограничен Java 17, но также затрагивает некоторые аспекты Java 18.

Нет фото

Федор Урванов обладает более чем тринадцатилетним опытом профессионального программирования. Обладает сертификатами 1Z0-803 (Oracle Certified Associate, Java SE 7 Programmer) и 1Z0-804 (Oracle Certified Professional, Java SE 7 Programmer), 7 лет ведёт блог по разработке программного обеспечения https://urvanov.ru, имеет богатый опыт коммерческой разработки на Java, участвовал в разработке программного обеспечения для нескольких крупнейших банков России.

Книгу “Java. Состояние языка и его перспективы” можно купить со скидкой в интернет-магазине издательства “БХВ“.

Глава 1. Введение………………………………………… 7

1.1. Для кого эта книга……………………………………….. 7

1.2. Что понадобится…………………………………………. 7

1.3. Первая программа………………………………………. 8

1.4. Задания…………………………………………………… 11

Глава 2. Переменные…………………………………. 11

2.1. Типы переменных……………………………………… 11

2.2. Соглашение об именовании переменных…………. 13

2.3. Типы данных……………………………………………. 13

2.4. Значения по умолчанию………………………………. 14

2.5. Литералы………………………………………………… 15

2.6. Целочисленные литералы……………………………. 15

2.7. Литералы с плавающей точкой……………………… 16

2.8. Символьные и строковые литералы……………….. 17

2.9. Другие литералы……………………………………….. 18

2.10. Массивы……………………………………………….. 19

2.11. Задания…………………………………………………. 20

Глава 3. Операции……………………………………… 21

3.1. Операция присваивания……………………………… 21

3.2. Преобразование примитивных типов………………. 22

3.3. Расширяющее преобразование примитивов……… 22

3.4. Сужающее преобразование примитивов………….. 23

3.5. Арифметические операции…………………………… 24

3.6. Унарные операции…………………………………….. 26

3.7. Отличие постфиксного и префиксного инкремента и декремента            27

3.8. Операции сравнения………………………………….. 28

3.9. Логические И и ИЛИ…………………………………… 29

3.10. Операция instanceof…………………………………. 29

3.11. Тернарная операция…………………………………. 31

3.12. Битовые операции……………………………………. 31

3.13. Присвоение с выполнением другой операции….. 32

3.14. Приоритеты операций……………………………….. 33

3.15. Задания…………………………………………………. 34

Глава 4. Выражения, инструкции и блоки……. 35

4.1. Операторы управления порядком выполнения….. 36

4.2. Операторы if-then и if-then-else……………………… 37

4.3. Оператор switch………………………………………… 39

4.4. Оператор while………………………………………….. 43

4.5. Оператор do-while……………………………………… 45

4.6. Оператор for…………………………………………….. 45

4.7. Оператор break…………………………………………. 47

4.8. Оператор continue……………………………………… 48

4.9. Оператор return…………………………………………. 49

4.10. Задания…………………………………………………. 50

Глава 5. Классы и объекты………………………… 50

5.1. Классы……………………………………………………. 50

5.2. Поля………………………………………………………. 51

5.3. Объявление методов………………………………….. 53

5.4. Конструкторы……………………………………………. 56

5.5. Передача параметров…………………………………. 58

5.6. Сборка мусора………………………………………….. 61

5.7. Ключевое слово this…………………………………… 61

5.8. Ключевое слово static………………………………… 63

5.9. Ключевое слово final………………………………….. 64

5.10. Инициализация полей……………………………….. 66

5.11. Задания…………………………………………………. 68

Глава 6. Аннотации…………………………………….. 69

6.1. Объявление аннотаций……………………………….. 69

6.2. Предопределенные аннотации………………………. 72

6.3. Мета-аннотации………………………………………… 73

6.4. Задания…………………………………………………… 75

Глава 7. Вложенные классы
и лямбда-выражения………………………………….. 75

7.1. Что такое вложенные классы……………………….. 75

7.2. Для чего использовать вложенные классы………. 76

7.3. Статические вложенные классы……………………. 77

7.4. Внутренние классы……………………………………. 79

7.5. Внутренний класс, являющийся нестатическим членом класса              80

7.6. Локальные классы…………………………………….. 81

7.7. Анонимные классы…………………………………….. 82

7.8. Затенение переменных……………………………….. 84

7.9. Лямбда-выражения…………………………………….. 85

7.10. Ссылки на методы……………………………………. 89

7.11. Когда использовать вложенные классы, локальные классы, анонимные классы
и лямбда-выражения……………………………………… 91

7.12. Задания…………………………………………………. 92

Глава 8. Интерфейсы…………………………………. 93

8.1. Теория……………………………………………………. 93

8.2. Задания…………………………………………………… 99

Глава 9. Наследование……………………………….. 99

9.1. Введение…………………………………………………. 99

9.2. Приведение типов……………………………………. 101

9.3. Переопределение (overriding) и скрытие (hiding) методов       102

9.4. Использование ключевого слова super………….. 106

9.5. Общий предок Object и его методы……………….. 109

9.6. Ключевое слово final и неизменяемые классы…. 112

9.7. Абстрактные методы и классы…………………….. 112

9.8. Задания…………………………………………………. 113

Глава 10. Пакеты……………………………………… 114

10.1. Теория…………………………………………………. 114

10.2. Задания……………………………………………….. 118

Глава 11. Перечисления……………………………. 118

11.1. Теория…………………………………………………. 118

11.2. Задания……………………………………………….. 123

Глава 12. Записи………………………………………. 123

12.1. Теория…………………………………………………. 123

12.2. Задания……………………………………………….. 125

Глава 13. Числа………………………………………… 126

13.1. Введение……………………………………………… 126

13.2. BigInteger……………………………………………… 128

13.3. BigDecimal……………………………………………. 130

13.4. Math……………………………………………………. 132

13.5. Задания……………………………………………….. 133

Глава 14. Строки………………………………………. 134

14.1. Класс String…………………………………………… 134

14.2. Методы класса String………………………………. 140

14.3. StringBuilder и StringBuffer…………………………. 143

14.4. Задания……………………………………………….. 145

Глава 15. Автоупаковка и распаковка……….. 146

15.1. Теория…………………………………………………. 146

15.2. Задания……………………………………………….. 148

Глава 16. Optional…………………………………….. 149

16.1. Теория…………………………………………………. 149

16.2. Задания……………………………………………….. 154

Глава 17. Модули……………………………………… 154

17.1. Теория…………………………………………………. 154

17.2. Задания……………………………………………….. 159

Глава 18. Обобщения………………………………… 160

18.1. Введение……………………………………………… 160

18.2. Класс Lair……………………………………………… 160

18.3. Обобщенная версия класса Lair…………………. 161

18.4. Соглашение об именовании переменных типа.. 162

18.5. Создание экземпляра обобщенного типа и обращение к нему              162

18.6. Бриллиантовая операция (Diamond operator)…. 163

18.7. Несколько параметров типа………………………. 164

18.8. Сырой тип (Raw type)……………………………… 164

18.9. Сообщения об ошибках “unchecked”……………. 165

18.10. Обобщенные методы……………………………… 166

18.11. Ограниченные параметры типа…………………. 167

18.12. Обобщения, наследование и дочерние типы… 169

18.13. Выведение типов………………………………….. 171

18.14. Выведение типов и обобщенные методы…….. 172

18.15. Выведение типов и создание экземпляра обобщенного класса           173

18.16. Выведение типа и обобщенные конструкторы обобщенных и необобщенных классов          174

18.17. Целевые типы……………………………………… 175

18.18. Подстановочный символ (wildcard)……………. 176

18.19. Подстановочный символ, ограниченный сверху (Upper bounded wildcard)           176

18.20. Неограниченный подстановочный символ (Unbounded wildcard)         177

18.21. Подстановочные символы и дочерние типы… 179

18.22. Захват символа подстановки (Wildcard Capture) и вспомогательные методы       180

18.23. Руководство по использованию подстановочного символа 182

18.24. Стирание типа (Type Erasure)…………………… 184

18.25. Стирание типа в обобщенных типах…………… 184

18.26. Стирание типа в обобщенных методах……….. 185

18.27. Получение аргумента типа родительского класса 185

18.28. Влияние стирания типа и методы-мосты
(bridge methods)………………………………………….. 186

18.29. Методы-мосты (Bridge Methods)……………….. 187

18.30. Загрязнение кучи (Heap pollution)………………. 188

18.31. Подавление предупреждений для методов с произвольным количеством параметров с нематериализуемыми формальными
параметрами………………………………………………. 191

18.32. Ограничения обобщений…………………………. 192

18.33. Задания………………………………………………. 195

Глава 26. Коллекции…………………………………. 278

26.1. Введение……………………………………………… 278

26.2. Интерфейс Collection………………………………. 278

26.3. Интерфейс Set………………………………………. 280

26.4. Интерфейс List………………………………………. 281

26.5. Интерфейс Queue…………………………………… 283

26.6. Интерфейс Deque…………………………………… 284

26.7. Интерфейс Map……………………………………… 285

26.8. Интерфейс ConcurrentMap………………………… 286

26.9. Класс Dictionary и его наследник Hashtable…… 287

26.10. Сортировка объектов……………………………… 287

26.11. Интерфейс SortedSet……………………………… 292

26.12. Интерфейс SortedMap……………………………. 294

26.13. Другие реализации интерфейсов коллекций…. 295

26.14. Java Stream API……………………………………. 296

26.15. Алгоритмы…………………………………………… 303

26.16. Задания………………………………………………. 304

Глава 27. Дата и время……………………………… 305

27.1. Введение……………………………………………… 305

27.2. Класс Date……………………………………………. 305

27.3. Класс Calendar………………………………………. 306

27.4. Пакет java.time………………………………………. 308

27.5. Перечисление DayOfWeek……………………….. 308

27.6. Перечисление Month……………………………….. 309

27.7. Класс LocalDate……………………………………… 311

27.8. Класс LocalTime…………………………………….. 311

27.9. Класс LocalDateTime……………………………….. 311

27.10. Класс YearMonth…………………………………… 312

27.11. Класс MonthDay……………………………………. 313

27.12. Класс Year…………………………………………… 313

27.13. Классы ZoneId и ZoneOffset…………………….. 313

27.14. Класс ZonedDateTime…………………………….. 315

27.15. Класс OffsetDateTime…………………………….. 315

27.16. Класс OffsetTime………………………………….. 316

27.17. Класс Instant……………………………………….. 316

27.18. Форматирование и преобразование из строки. 317

27.19. Интерфейс TemporalAdjuster……………………. 318

27.20. Интерфейс TemporalQuery………………………. 319

27.21. Класс Duration……………………………………… 319

27.22. Перечисление ChronoUnit……………………….. 320

27.23. Класс Period………………………………………… 320

27.24. Класс Clock…………………………………………. 321

27.25. Задания………………………………………………. 321

Глава 28. Форматирование и парсинг………… 322

28.1. Введение……………………………………………… 322

28.2. Класс NumberFormat……………………………….. 323

28.3. Класс DecimalFormat………………………………. 324

28.4. Класс DateFormat…………………………………… 325

28.5. Класс DateTimeFormatter…………………………. 326

28.6. Класс SimpleDateFormat…………………………… 326

28.7. Класс PrintStream…………………………………… 328

28.8. Класс Formatter……………………………………… 328

28.9. Класс Scanner……………………………………….. 333

28.10. Задания………………………………………………. 335

Глава 29. Работа с консолью…………………….. 336

29.1. Теория…………………………………………………. 336

29.2. Задание……………………………………………….. 338

Глава 30. Локализация……………………………… 339

30.1. Теория…………………………………………………. 339

30.2. Задание……………………………………………….. 341

Глава 31. Пример сервиса со Spring………….. 342

31.1. Что за сервис мы напишем……………………….. 342

31.2. Spring Initializr………………………………………… 343

31.3. Разбор сгенерированного скелета приложения.. 346

31.4. Добавление конечных точек………………………. 349

31.5. Слой бизнес-сервисов……………………………… 351

31.6. Работа с базой данных…………………………….. 357

31.7. Вызов методов с Postman………………………… 360

31.8. Docker…………………………………………………. 360

31.9. Kubernetes……………………………………………. 363

31.10. Задания………………………………………………. 366

Глава 32. Заключение……………………………….. 367

 

 

 

Добавить комментарий