cpp

Николай Прохоренок. Основы Java. 2-е изд.

Описан базовый синтаксис языка Java: типы данных, операторы, условия, циклы, регулярные выражения, лямбда-выражения, ссылки на методы, объектно-ориентированное программирование. Рассмотрены основные классы стандартной библиотеки, получение данных из сети Интернет, работа с базой данных MySQL. Приводится описание Date API, Stream API, лямбда-выражений, ссылок на методы, функциональные интерфейсы и др. Во втором издании приводится описание большинства нововведений: модули, интерактивная оболочка JShell, инструкция var и др. Книга содержит большое количество практических примеров, помогающих начать программировать на языке Java самостоятельно. Весь материал тщательно подобран, хорошо структурирован и компактно изложен, что позволяет использовать книгу как удобный справочник. Электронный архив с примерами из книги можно скачать с сайта издательства.

Требования к читателям: умение пользоваться компьютером. Желательно знание любого другого языка программирования. Если Вы только начинаете, то лучше начните c языка Python или JavaScript. У последнего синтаксис очень похож на синтаксис языка Java, но не в ООП стиле. Основная сложность при изучении Java состоит в том, что ООП стиль программирования нужно использовать с первых строк кода. Другого способа нет. А вот как объяснить, что такое ООП, если читатель не знает даже что такое переменная...

См. также: "JavaFX. В подлиннике" (разработка оконных приложений на языке Java)
См. также: "OpenCV и Java. Обработка изображений и компьютерное зрение"
См. также: "Язык C. Самое необходимое"
См. также: "Основы C++"

Оглавление книги Основы Java. 2-е изд.

Введение

Глава 1. Первые шаги

1.1. Установка Java SE Development Kit (JDK)
1.2. Первая программа
1.3. Установка и настройка редактора Eclipse
1.4. Структура программы
1.5. Комментарии в программе
1.6. Вывод данных
1.7. Ввод данных
1.8. Получение данных из командной строки
1.9. Преждевременное завершение выполнения программы
1.10. Интерактивная оболочка JShell

Глава 2. Переменные и типы данных

2.1. Объявление переменной внутри метода
2.2. Именование переменных
2.3. Типы данных
2.4. Инициализация переменных
2.5. Константы
2.6. Статические переменные и константы класса
2.7. Области видимости переменных
2.8. Преобразование и приведение типов
2.9. Инструкция var
2.10. Перечисления

Глава 3. Операторы и циклы

3.1. Математические операторы
3.2. Побитовые операторы
3.3. Операторы присваивания
3.4. Операторы сравнения
3.5. Приоритет выполнения операторов
3.6. Оператор ветвления if
3.7. Оператор ?:
3.8. Оператор выбора switch
3.9. Цикл for
3.10. Цикл for each
3.11. Цикл while
3.12. Цикл do...while
3.13. Оператор continue: переход на следующую итерацию цикла
3.14. Оператор break: прерывание цикла

Глава 4. Числа

4.1. Математические константы
4.2. Основные методы для работы с числами
4.3. Округление чисел
4.4. Тригонометрические методы
4.5. Преобразование строки в число
4.6. Преобразование числа в строку
4.7. Генерация псевдослучайных чисел
4.8. Бесконечность и значение NaN

Глава 5. Массивы

5.1. Объявление и инициализация массива
5.2. Определение размера массива
5.3. Получение и изменение значения элемента массива
5.4. Перебор элементов массива
5.5. Многомерные массивы
5.6. Поиск минимального и максимального значения
5.7. Заполнение массива значениями
5.8. Сортировка массива
5.9. Проверка наличия значения в массиве
5.10. Переворачивание и перемешивание массива
5.11. Заполнение массива случайными числами
5.12. Копирование элементов из одного массива в другой
5.13. Сравнение массивов
5.14. Преобразование массива в строку

Глава 6. Символы и строки

6.1. Объявление и инициализация отдельного символа
6.2. Создание строки
6.3. Определение длины строки
6.4. Доступ к отдельным символам
6.5. Получение фрагмента строки
6.6. Конкатенация строк
6.7. Настройка локали
6.8. Изменение регистра символов
6.9. Сравнение строк
6.10. Поиск и замена в строке
6.11. Преобразование строки в массив и обратно
6.12. Преобразование кодировок
6.13. Форматирование строки

Глава 7. Регулярные выражения

7.1. Создание шаблона и проверка полного соответствия шаблону
7.2. Модификаторы
7.3. Синтаксис регулярных выражений
7.4. Поиск всех совпадений с шаблоном
7.5. Замена в строке
7.6. Метод split()

Глава 8. Работа с датой и временем (классический способ)

8.1. Класс Date
    8.1.1. Создание экземпляра класса Date
    8.1.2. Форматирование даты и времени
8.2. Класс Calendar
    8.2.1. Метод getInstance()
    8.2.2. Получение компонентов даты и времени
    8.2.3. Установка компонентов даты и времени
    8.2.4. Сравнение объектов
8.3. Класс GregorianCalendar
    8.3.1. Создание экземпляра класса GregorianCalendar
    8.3.2. Установка и получение компонентов даты и времени
    8.3.3. Изменение компонентов даты и времени
    8.3.4. Сравнение объектов
8.4. Класс SimpleDateFormat: форматирование даты и времени
8.5. Класс DateFormatSymbols
8.6. Засыпание программы и измерение времени выполнения

Глава 9. Работа с датой и временем (в версиях Java SE 8 и выше)

9.1. Класс LocalDate: дата
    9.1.1. Создание экземпляра класса LocalDate
    9.1.2. Установка и получение компонентов даты
    9.1.3. Прибавление и вычитание значений
    9.1.4. Преобразование объекта класса LocalDate в объект класса LocalDateTime
    9.1.5. Сравнение объектов
    9.1.6. Преобразование даты в строку
    9.1.7. Создание календаря на месяц и год
9.2. Класс LocalTime: время
    9.2.1. Создание экземпляра класса LocalTime
    9.2.2. Установка и получение компонентов времени
    9.2.3. Прибавление и вычитание значений
    9.2.4. Преобразование объекта класса LocalTime в объект класса LocalDateTime
    9.2.5. Сравнение объектов
    9.2.6. Преобразование времени в строку
9.3. Класс LocalDateTime: дата и время
    9.3.1. Создание экземпляра класса LocalDateTime
    9.3.2. Установка и получение компонентов даты и времени
    9.3.3. Прибавление и вычитание значений
    9.3.4. Сравнение объектов
    9.3.5. Преобразование даты и времени в строку
9.4. Класс Instant
    9.4.1. Создание экземпляра класса Instant
    9.4.2. Получение компонентов времени
    9.4.3. Прибавление и вычитание значений
    9.4.4. Сравнение объектов
    9.4.5. Преобразование объекта класса Instant в объект класса LocalDateTime
9.5. Класс DateTimeFormatter: форматирование даты и времени
    9.5.1. Создание экземпляра класса DateTimeFormatter
    9.5.2. Специальные символы в строке шаблона
9.6. Класс Period: разница между двумя датами
9.7. Получение количества дней между двумя датами
9.8. Получение времени в разных часовых поясах

Глава 10. Пользовательские методы

10.1. Создание статического метода
10.2. Вызов статического метода
10.3. Перегрузка методов
10.4. Способы передачи параметров в метод
10.5. Передача и возвращение массивов
10.6. Передача произвольного количества значений
10.7. Рекурсия

Глава 11. Объектно-ориентированное программирование

11.1. Основные понятия
11.2. Создание класса и экземпляра класса
11.3. Объявление полей внутри класса
11.4. Определение методов внутри класса
11.5. Конструкторы класса
11.6. Явная инициализация полей класса
11.7. Инициализационные блоки
11.8. Вызов одного конструктора из другого
11.9. Создание констант класса
11.10. Статические члены класса
11.11. Методы-фабрики
11.12. Наследование
11.13. Переопределение методов базового класса
11.14. Финальные классы и методы
11.15. Абстрактные классы и методы
11.16. Вложенные классы
    11.16.1. Обычные вложенные классы
    11.16.2. Статические вложенные классы
    11.16.3. Локальные вложенные классы
    11.16.4. Анонимные вложенные классы
11.17. Приведение типов
11.18. Класс Object
11.19. Массивы объектов
11.20. Передача объектов в метод и возврат объектов
11.21. Классы-обертки над элементарными типами

Глава 12. Интерфейсы

12.1. Создание интерфейса
12.2. Реализация нескольких интерфейсов
12.3. Расширение интерфейсов
12.4. Создание статических констант внутри интерфейса
12.5. Создание статических методов внутри интерфейса
12.6. Методы по умолчанию и закрытые методы
12.7. Интерфейсы и обратный вызов
12.8. Функциональные интерфейсы и лямбда-выражения
12.9. Область видимости лямбда-выражений
12.10. Ссылки на методы
12.11. Интерфейс Comparable
12.12. Интерфейс Cloneable

Глава 13. Обобщенные типы

13.1. Зачем нужны обобщенные типы
13.2. Обобщенные классы
13.3. Ограничение обобщенного типа
13.4. Обобщенные методы
13.5. Маски типов
13.6. Наследование обобщенных классов
13.7. Обобщенные интерфейсы
13.8. Ограничения на использование обобщенных типов

Глава 14. Коллекции. Списки и очереди

14.1. Интерфейс Collection<E>
14.2. Интерфейсы Iterable<T> и Iterator<T>
14.3. Интерфейсы Comparable<T> и Comparator<T>
14.4. Интерфейс List<E>
14.5. Класс ArrayList<E>: динамический список
    14.5.1. Создание объекта
    14.5.2. Вставка элементов
    14.5.3. Определение количества элементов
    14.5.4. Удаление элементов
    14.5.5. Доступ к элементам
    14.5.6. Поиск и замена элементов в списке
    14.5.7. Поиск минимального и максимального значения в списке
    14.5.8. Преобразование массива в список и списка в массив
    14.5.9. Перемешивание и переворачивание списка
    14.5.10. Сортировка элементов списка
    14.5.11. Перебор элементов списка
    14.5.12. Интерфейс ListIterator<E>
14.6. Интерфейсы Queue<E> и Deque<E>
14.7. Класс ArrayDeque<E>: двухсторонняя очередь
    14.7.1. Создание объекта
    14.7.2. Вставка элементов
    14.7.3. Определение количества элементов
    14.7.4. Удаление элементов
    14.7.5. Получение элементов из очереди
    14.7.6. Проверка существования элементов в очереди
    14.7.7. Поиск минимального и максимального значения в очереди
    14.7.8. Преобразование массива в очередь и очереди в массив
    14.7.9. Перебор элементов очереди
14.8. Класс PriorityQueue<E>: очередь с приоритетами
14.9. Класс LinkedList<E>: связанный список и очередь
14.10. Класс Vector<E>: синхронизированный динамический список
    14.10.1. Создание объекта
    14.10.2. Методы класса Vector<E>
    14.10.3. Интерфейс Enumeration<E>
14.11. Класс Stack<E>: стек
14.12. Класс BitSet: набор битов

Глава 15. Коллекции. Множества и словари

15.1. Интерфейс Set<E>
15.2. Класс HashSet<E>: множество
    15.2.1. Создание объекта
    15.2.2. Вставка элементов
    15.2.3. Определение количества элементов
    15.2.4. Удаление элементов
    15.2.5. Проверка существования элементов
    15.2.6. Преобразование массива во множество и множества в массив
    15.2.7. Перебор элементов множества
15.3. Класс LinkedHashSet<E>
15.4. Интерфейсы SortedSet<E> и NavigableSet<E>
15.5. Класс TreeSet<E>
    15.5.1. Создание объекта
    15.5.2. Методы из интерфейса SortedSet<E>
    15.5.3. Методы из интерфейса NavigableSet<E>
15.6. Интерфейс Map<K, V>
15.7. Класс HashMap<K, V>: словарь
    15.7.1. Создание объекта
    15.7.2. Вставка элементов
    15.7.3. Определение количества элементов
    15.7.4. Удаление элементов
    15.7.5. Доступ к элементам
    15.7.6. Изменение значений элементов
    15.7.7. Проверка существования элементов
    15.7.8. Перебор элементов словаря
15.8. Класс LinkedHashMap<K, V>
15.9. Интерфейсы SortedMap<K, V> и NavigableMap<K, V>
15.10. Класс TreeMap<K, V>
    15.10.1. Создание объекта
    15.10.2. Методы из интерфейса SortedMap<K, V>
    15.10.3. Методы из интерфейса NavigableMap<K, V>
15.11. Класс Hashtable<K, V>
15.12. Класс Properties

Глава 16. Пакеты, JAR-архивы и модули

16.1. Инструкция import
16.2. Импорт статических членов класса
16.3. Инструкция package
16.4. Пути поиска классов
16.5. JAR-архивы
    16.5.1. Создание JAR-архива
    16.5.2. Исполняемые JAR-архивы
    16.5.3. Редактирование JAR-архивов
    16.5.4. Создание JAR-архива в редакторе Eclipse
16.6. Модули
    16.6.1. Безымянные модули
    16.6.2. Автоматические модули
    16.6.3. Создание модуля из командной строки
    16.6.4. Файл module-info
    16.6.5. Создание модульного JAR-архива
    16.6.6. Создание модуля в редакторе Eclipse

Глава 17. Обработка ошибок

17.1. Типы ошибок
17.2. Инструкция try...catch...finally
17.3. Оператор throw: генерация исключений
17.4. Иерархия классов исключений
17.5. Типы исключений
17.6. Пользовательские классы исключений
17.7. Способы поиска ошибок в программе
17.8. Протоколирование
17.9. Инструкция assert
17.10. Отладка программы в редакторе Eclipse

Глава 18. Работа с файлами и каталогами

18.1. Класс File
    18.1.1. Создание объекта
    18.1.2. Преобразование пути к файлу или каталогу
    18.1.3. Работа с дисками
    18.1.4. Работа с каталогами
    18.1.5. Работа с файлами
    18.1.6. Права доступа к файлам и каталогам
18.2. Класс Files
    18.2.1. Класс Paths и интерфейс Path
    18.2.2. Работа с дисками
    18.2.3. Работа с каталогами
    18.2.4. Обход дерева каталогов
    18.2.5. Работа с файлами
    18.2.6. Права доступа к файлам и каталогам
    18.2.7. Атрибуты файлов и каталогов
    18.2.8. Копирование и перемещение файлов и каталогов
    18.2.9. Чтение и запись файлов
18.3. Получение сведений об операционной системе

Глава 19. Байтовые потоки ввода/вывода

19.1. Базовые классы байтовых потоков ввода/вывода
    19.1.1. Класс OutputStream
    19.1.2. Класс FileOutputStream
    19.1.3. Класс InputStream
    19.1.4. Класс FileInputStream
19.2. Интерфейс AutoCloseable и инструкция try-with-resources
19.3. Буферизованные байтовые потоки
    19.3.1. Класс BufferedOutputStream
    19.3.2. Класс BufferedInputStream
19.4. Класс PushbackInputStream
19.5. Запись и чтение двоичных данных
    19.5.1. Класс DataOutputStream
    19.5.2. Интерфейс DataOutput
    19.5.3. Класс DataInputStream
    19.5.4. Интерфейс DataInput
19.6. Сериализация объектов
    19.6.1. Класс ObjectOutputStream
    19.6.2. Интерфейс ObjectOutput
    19.6.3. Класс ObjectInputStream
    19.6.4. Интерфейс ObjectInput
19.7. Файлы с произвольным доступом

Глава 20. Символьные потоки ввода/вывода

20.1. Базовые классы символьных потоков ввода/вывода
    20.1.1. Класс Writer
    20.1.2. Класс OutputStreamWriter
    20.1.3. Класс Reader
    20.1.4. Класс InputStreamReader
20.2. Буферизованные символьные потоки ввода/вывода
    20.2.1. Класс BufferedWriter
    20.2.2. Класс BufferedReader
20.3. Класс PushbackReader
20.4. Классы PrintWriter и PrintStream
    20.4.1. Класс PrintWriter
    20.4.2. Класс PrintStream
    20.4.3. Перенаправление стандартных потоков вывода
20.5. Класс Scanner
20.6. Класс Console

Глава 21. Работа с потоками данных: Stream API

21.1. Создание потока данных
    21.1.1. Создание потока из коллекции
    21.1.2. Создание потока из массива или списка значений
    21.1.3. Создание потока из строки
    21.1.4. Создание потока из файла или каталога
    21.1.5. Создание потока с помощью итератора или генератора
    21.1.6. Создание потока случайных чисел
    21.1.7. Создание пустого потока
21.2. Промежуточные операции
    21.2.1. Основные методы
    21.2.2. Преобразование типа потока
    21.2.3. Объединение и добавление потоков
21.3. Терминальные операции
    21.3.1. Основные методы
    21.3.2. Класс Optional<T>
    21.3.3. Преобразование потока в коллекцию, массив или в другой объект

Глава 22. Получение данных из сети Интернет

22.1. Класс URI
22.2. Класс URL
    22.2.1. Разбор URL-адреса
    22.2.2. Кодирование и декодирование строки запроса
    22.2.3. Получение данных из сети Интернет
22.3. Классы URLConnection и HttpURLConnection
    22.3.1. Установка тайм-аута
    22.3.2. Получение заголовков ответа сервера
    22.3.3. Отправка заголовков запроса
    22.3.4. Отправка запроса методом GET
    22.3.5. Отправка запроса методом POST
    22.3.6. Отправка файла методом POST
    22.3.7. Обработка перенаправлений
    22.3.8. Обработка кодов ошибок

Глава 23. Работа с базой данных MySQL

23.1. Установка JDBC-драйвера
23.2. Регистрация драйвера и подключение к базе данных
23.3. Создание базы данных
23.4. Создание таблицы
23.5. Добавление записей
23.6. Обновление и удаление записей
23.7. Получение записей
23.8. Метод execute()
23.9. Получение информации о структуре набора ResultSet
23.10. Транзакции
23.11. Получение информации об ошибках

Глава 24. Многопоточные приложения

24.1. Создание и прерывание потока
24.2. Потоки-демоны
24.3. Состояния потоков
24.4. Приоритеты потоков
24.5. Метод join()
24.6. Синхронизация
    24.6.1. Ключевое слово volatile
    24.6.2. Ключевое слово synchronized
    24.6.3. Синхронизированные блоки
    24.6.4. Методы wait(), notify() и notifyAll()
24.7. Пакет java.util.concurrent.locks
    24.7.1. Интерфейс Lock
    24.7.2. Интерфейс Condition
24.8. Пакет java.util.concurrent
    24.8.1. Интерфейс BlockingQueue<E>: блокирующая односторонняя очередь
    24.8.2. Интерфейс BlockingDeque<E>: блокирующая двухсторонняя очередь
    24.8.3. Класс PriorityBlockingQueue<E>: блокирующая очередь с приоритетами
    24.8.4. Интерфейсы Callable<V> и Future<V>
    24.8.5. Пулы потоков
24.9. Синхронизация коллекций

Глава 25. Java SE 11

25.1. Установка OpenJDK 11
25.2. Установка и настройка редактора Eclipse
25.3. Компиляция и запуск программы в Java 11
25.4. Инструкция var в лямбда-выражениях
25.5. Новые методы в классе String
25.6. Новый метод of() в интерфейсе Path
25.7. Новые методы в классе Files
25.8. Новый формат метода toArray() в интерфейсе Collection<E>
25.9. Новый метод not() в интерфейсе Predicate<T>
25.10. Модуль java.net.http
    25.10.1. Класс HttpRequest: описание параметров запроса
    25.10.2. Класс HttpClient: отправка запроса и получение ответа сервера
    25.10.3. Интерфейс HttpResponse<T>: обработка ответа сервера
    25.10.4. Отправка запроса методом GET
    25.10.5. Отправка запроса методом POST

Заключение

Предметный указатель книги "Основы Java. 1-е изд."