Часть I. Базовые конструкции языка Java 15

Глава 1. Встроенные типы данных, операции над ними 17

Первая программа на Java 17
Комментарии 20
Аннотации 22
Константы 22
Целые 22
Действительные 23
Символы 23
Строки 24
Имена 25
Примитивные типы данных и операции 26
Логический тип 27
Логические операции 27
Упражнения 28
Целые типы 28
Операции над целыми типами 29
Арифметические операции 29
Приведение типов 30
Операции сравнения 32
Побитовые операции 32
Сдвиги 33
Упражнения 34
Вещественные типы 34
Операции присваивания 35
Упражнения 36
Условная операция 36
Упражнения 36
Выражения 36
Приоритет операций 37
Операторы 38
Блок 39
Операторы присваивания 39
Условный оператор 39
Упражнения 41
Операторы цикла 42
Оператор continue и метки 44
Оператор break 45
Упражнения 45
Оператор варианта 46
Массивы 47
Многомерные массивы 49
Заключение 51
Вопросы для самопроверки 51
Глава 2. Объектно-ориентированное программирование в Java 52

Парадигмы программирования 52
Принципы объектно-ориентированного программирования 55
Абстракция 55
Иерархия 58
Ответственность 59
Модульность 60
Принцип KISS 62
Упражнения 63
Как описать класс и подкласс? 63
Передача аргументов в метод 64
Перегрузка методов 66
Переопределение методов 67
Реализация полиморфизма в Java 67
Упражнения 69
Абстрактные методы и классы 69
Окончательные члены и классы 70
Класс Object 70
Конструкторы класса 71
Операция new 72
Упражнение 73
Статические члены класса 73
Класс Complex 75
Метод main() 78
Методы с переменным числом аргументов 79
Где видны переменные 80
Вложенные классы 81
Отношения "быть частью" и "являться" 86
Заключение 86
Вопросы для самопроверки 87
Глава 3. Пакеты, интерфейсы и перечисления 88

Пакет и подпакет 89
Права доступа к членам класса 90
Размещение пакетов по файлам 92
Импорт классов и пакетов 94
Java-файлы 95
Интерфейсы 96
Перечисления 100
Объявление аннотаций 103
Design patterns 104
Схема проектирования MVC 105
Шаблон Singleton 106
Заключение 107
Вопросы для самопроверки 107
Часть II. Использование классов

из Java Development Kit 109
Глава 4. Классы-оболочки и generics 111

Числовые классы 112
Автоматическая упаковка и распаковка типов 114
Настраиваемые типы (generics) 115
Шаблон типа (wildcard type) 117
Настраиваемые методы 119
Класс Boolean 119
Класс Character 120
Класс BigInteger 123
Класс BigDecimal 125
Класс Class 129
Вопросы для самопроверки 131
Глава 5. Работа со строками 132

Класс String 133
Как создать строку 133
Упражнение 138
Сцепление строк 138
Манипуляции строками 138
Как узнать длину строки 139
Как выбрать символы из строки 139
Как выбрать подстроку 140
Как разбить строку на подстроки 140
Как сравнить строки 141
Как найти символ в строке 142
Как найти подстроку 143
Как изменить регистр букв 143
Как заменить отдельный символ 144
Как заменить подстроку 144
Как убрать пробелы в начале и конце строки 144
Как преобразовать в строку данные другого типа 144
Упражнения 145
Класс StringBuilder 145
Конструкторы 145
Как добавить подстроку 146
Как вставить подстроку 146
Как удалить подстроку 147
Как удалить символ 147
Как заменить подстроку 147
Как перевернуть строку 148
Синтаксический разбор строки 148
Класс StringTokenizer 148
Заключение 149
Вопросы для самопроверки 149
Глава 6. Классы-коллекции 150

Класс Vector 150
Как создать вектор 151
Как добавить элемент в вектор 151
Как заменить элемент 152
Как узнать размер вектора 152
Как обратиться к элементу вектора 152
Как узнать, есть ли элемент в векторе 152
Как узнать индекс элемента 152
Как удалить элементы 153
Класс Stack 154
Класс Hashtable 155
Как создать таблицу Hashtable 155
Как заполнить таблицу Hashtable 156
Как получить значение по ключу 156
Как узнать наличие ключа или значения 156
Как получить все элементы таблицы Hashtable 156
Как удалить элементы 157
Класс Properties 158
Интерфейс Collection 160
Интерфейс List 161
Интерфейс Set 162
Интерфейс SortedSet 162
Интерфейс NavigableSet 162
Интерфейс Queue 163
Интерфейс BlockingQueue 164
Интерфейс Deque 164
Интерфейс BlockingDeque 165
Интерфейс Map 165
Вложенный интерфейс Map.Entry 166
Интерфейс SortedMap 166
Интерфейс NavigableMap 167
Абстрактные классы-коллекции 168
Интерфейс Iterator 168
Интерфейс ListIterator 170
Классы, создающие списки 171
Двунаправленный список 171
Дек 172
Упражнение 172
Классы, создающие отображения 172
Связанные отображения 172
Упорядоченные отображения 173
Сравнение элементов коллекций 173
Упражнение 174
Классы, создающие множества 174
Связанные множества 175
Упорядоченные множества 175
Действия с коллекциями 176
Методы класса Collections 176
Упражнение 177
Заключение 177
Вопросы для самопроверки 177
Глава 7. Классы-утилиты 178

Работа с массивами 178
Сортировка массива 178
Бинарный поиск в массиве 178
Заполнение массива 179
Копирование массива 179
Сравнение массивов 180
Представление массива строкой 180
Получение хеш-кода массива 181
Локальные установки 181
Работа с датами и временем 182
Часовой пояс и летнее время 183
Класс Calendar 183
Подкласс GregorianCalendar 184
Представление даты и времени 185
Получение случайных чисел 186
Копирование массивов 186
Взаимодействие с системой 187
Часть III. Создание графического интерфейса

пользователя и апплетов 189
Глава 8. Принципы построения графического интерфейса 191

Компонент и контейнер 193
Иерархия классов AWT 196
Окно библиотеки Swing 197
Использование системных приложений 198
System Tray 199
Splash Screen 199
Заключение 200
Вопросы для самопроверки 200
Глава 9. Графические примитивы 201

Методы класса Graphics 201
Как задать цвет 201
Упражнение 203
Как нарисовать чертеж 203
Класс Polygon 204
Упражнение 205
Прочие методы класса Graphics 205
Как вывести текст 205
Как установить шрифт 206
Как задать шрифт 206
Класс FontMetrics 210
Упражнение 213
Возможности Java 2D 213
Преобразование координат 214
Класс AffineTransform 215
Упражнение 218
Рисование фигур средствами Java 2D 218
Класс BasicStroke 218
Класс GeneralPath 221
Классы GradientPaint и TexturePaint 222
Классы LinearGradientPaint и RadialGradientPaint 224
Вывод текста средствами Java 2D 225
Методы улучшения визуализации 230
Упражнение 231
Заключение 231
Вопросы для самопроверки 232
Глава 10. Основные компоненты AWT 233

Класс Component 233
Класс Cursor 235
Как создать свой курсор 235
Упражнение 236
События 237
Класс Container 237
События 238
Текстовая метка Label 238
События 238
Кнопка Button 238
События 239
Кнопка выбора Checkbox 239
События 239
Класс CheckboxGroup 239
Как создать группу радиокнопок 240
Раскрывающийся список Choice 241
События 242
Список List 242
События 243
Компоненты для ввода текста 244
Класс TextComponent 244
События 245
Строка ввода TextField 245
События 246
Поле ввода TextArea 246
События 246
Линейка прокрутки Scrollbar 248
События 249
Контейнер Panel 251
Контейнер ScrollPane 252
Контейнер Window 252
События 253
Контейнер Frame 253
События 254
Контейнер Dialog 255
События 257
Контейнер FileDialog 259
События 259
Создание собственных компонентов 260
Компонент Canvas 260
Создание "легкого" компонента 262
Упражнение 264
Создание меню 264
Всплывающее меню 270
Вопросы для самопроверки 273
Глава 11. Оформление ГИП компонентами Swing 274

Состав библиотеки Swing 275
Основные компоненты Swing 277
Компонент JComponent 277
Схема MVC в компонентах Swing 278
Надпись JLabel 280
Кнопки 282
Кнопка JButton 284
Кнопка выбора JToggleButton 285
Кнопка выбора JCheckBox 286
Радиокнопка JRadioButton 286
Упражнение 288
Раскрывающийся список JComboBox 288
Список выбора JList 289
Визуализация элементов списков 291
Упражнение 293
Счетчик JSpinner 293
Полосы прокрутки JScrollBar 294
Ползунок JSlider 295
Упражнение 296
Индикатор JProgressBar 296
Дерево объектов JTree 297
Построение меню средствами Swing 301
Строка меню JMenuBar 301
Меню JMenu 301
Пункт меню JMenuItem 302
Пункт меню JCheckBoxMenuItem 303
Пункт меню JRadioButtonMenuItem 304
Всплывающее меню JPopupMenu 304
Панель выбора цвета JColorChooser 305
Упражнение 307
Окно выбора файла JFileChooser 307
Фильтр файлов FileFilter 307
Как получить выбранный файл 309
Дополнительный компонент 310
Замена изображений 311
Русификация Swing 312
Вопросы для самопроверки 313
Глава 12. Текстовые компоненты 314

Компонент JTextComponent 314
Модель данных — документ 314
Строка символов Segment 315
Запись текста в документ 316
Атрибуты текста 316
Удаление текста из документа 317
Фильтрация документа 317
Внесение структуры в документ 317
События в документе 318
Реализации документа 318
Установка модели данных 319
Вид 319
Контроллер — редактор текста 321
Курсор 321
Ограничение перемещения курсора 322
Реализации редактора 323
Раскладка клавиатуры 323
Печать текста документа 324
Поле ввода JTextField 325
Поле ввода пароля JPasswordField 327
Редактор объектов JFormattedTextField 327
Область ввода JTextArea 328
Текстовый редактор JEditorPane 329
Редактор JTextPane 330
Вопросы для самопроверки 331
Глава 13. Таблицы 332

Класс JTable 332
Модель данных таблицы 334
Модель ячеек таблицы 334
Свойства столбца таблицы TableColumn 339
Модель столбцов таблицы 339
Заголовки столбцов таблицы JTableHeader 340
Модель выделения ячеек 341
Визуализация ячеек таблицы 342
Редактор ячеек таблицы 346
Сортировка строк таблицы 349
Фильтрация строк таблицы 350
Печать таблицы 352
Вопросы для самопроверки 352
Глава 14. Размещение компонентов и контейнеры Swing 353

Менеджер FlowLayout 353
Менеджер BorderLayout 355
Менеджер GridLayout 357
Менеджер CardLayout 359
Менеджер GridBagLayout 360
Контейнеры Swing 362
Панель JPanel 362
Панель прокрутки JScrollPane 363
Двойная панель JSplitPane 365
Панель с вкладками JTabbedPane 367
Линейная панель Box 369
Менеджер размещения BoxLayout 369
Компоненты-заполнители 369
Менеджер размещения SpringLayout 371
Размеры Spring 372
Промежутки Constraints 373
Размещение компонентов 373
Панель инструментальных кнопок JToolBar 375
Интерфейс Action 377
Слоеная панель JLayeredPane 378
Корневая панель JRootPane 380
Окно JWindow 381
Диалоговое окно JDialog 382
Окно верхнего уровня JFrame 383
Внутреннее окно JInternalFrame 384
Рабочий стол JDesktopPane 386
Стандартные диалоги JOptionPane 387
Окно с индикатором ProgressMonitor 392
Заключение 393
Вопросы для самопроверки 393
Глава 15. Обработка событий 395

Самообработка событий 399
Обработка вложенным классом 400
Упражнение 401
Событие ActionEvent 402
Обработка действий мыши 402
Упражнение 405
Классы-адаптеры 406
Управление колесиком мыши 406
Обработка действий клавиатуры 408
Упражнение 409
Событие TextEvent 409
Событие изменения ChangeEvent 409
Обработка действий с окном 410
Событие ComponentEvent 411
Событие ContainerEvent 411
Cобытие FocusEvent 412
Событие ItemEvent 412
Событие AdjustmentEvent 412
Несколько слушателей одного источника 415
Диспетчеризация событий 416
Создание собственного события 418
Вопросы для самопроверки 419
Глава 16. Оформление рамок 420

Пустая рамка EmptyBorder 422
Прямолинейная рамка LineBorder 422
Объемная рамка BevelBorder 423
Закругленная объемная рамка SoftBevelBorder 424
Врезанная рамка EtchedBorder 424
Рамка с изображением MatteBorder 424
Рамки с надписями TitledBorder 426
Сдвоенные рамки CompoundBorder 428
Создание собственных рамок 430
Вопросы для самопроверки 435
Глава 17. Изменение внешнего вида компонента 436

Получение свойств L&F 438
Задание стандартного L&F 440
Дополнительные L&F 442
Смена всего L&F 442
Замена отдельных свойств L&F 445
Темы Java L&F 447
Вопросы для самопроверки 450
Глава 18. Апплеты 451

Упражнения 457
Передача параметров в апплет 457
Параметры тега 460
Сведения об окружении апплета 461
Упражнение 461
Изображение и звук в апплетах 461
Слежение за процессом загрузки 462
Класс MediaTracker 463
Упражнения 465
Защита от апплета 465
Апплеты в библиотеке Swing 466
Апплет JApplet 467
Упражнение 468
Заключение 469
Вопросы для самопроверки 469
Глава 19. Прочие свойства Swing 470

Свойства экземпляра компонента 470
Прокрутка содержимого компонента 471
Передача фокуса ввода 471
Перенос данных Drag and Drop 476
Временная задержка Timer 478
Глава 20. Изображения и звук 480

Модель "поставщик-потребитель" 480
Классы-фильтры 483
Как выделить фрагмент изображения 484
Как изменить цвет изображения 486
Как переставить пикселы изображения 486
Упражнения 488
Модель обработки прямым доступом 488
Преобразование изображения в Java 2D 491
Аффинное преобразование изображения 491
Изменение интенсивности изображения 494
Изменение составляющих цвета 495
Создание различных эффектов 496
Упражнения 497
Анимация 498
Улучшение изображения двойной буферизацией 500
Упражнения 504
Звук 504
Проигрывание звука в Java 505
Синтез и запись звука в Java 2 510
Упражнение 513
Вопросы для самопроверки 513
Часть IV. Необходимые конструкции Java 515

Глава 21. Обработка исключительных ситуаций 517

Блоки перехвата исключения 518
Упражнения 521
Часть заголовка метода throws 522

Оператор throw 524
Иерархия классов-исключений 525
Порядок обработки исключений 526
Упражнение 527
Создание собственных исключений 527
Заключение 528
Вопросы для самопроверки 528
Глава 22. Подпроцессы 530

Класс Thread 532
Синхронизация подпроцессов 536
Согласование работы нескольких подпроцессов 539
Приоритеты подпроцессов 543
Подпроцессы-демоны 543
Группы подпроцессов 544
Заключение 544
Вопросы для самопроверки 545
Глава 23. Потоки ввода/вывода и печать 546

Консольный ввод/вывод 551
Форматированный вывод 554
Спецификации вывода целых чисел 555
Спецификации вывода вещественных чисел 556
Спецификация вывода символов 556
Спецификации вывода строк 556
Спецификации вывода логических значений 556
Спецификации вывода хеш-кода объекта 556
Спецификации вывода даты и времени 556
Класс Console 557
Упражнения 558
Файловый ввод/вывод 558
Получение свойств файла 560
Буферизованный ввод/вывод 562
Каналы буферизованного ввода/вывода 563
Упражнения 564
Поток простых типов Java 564
Кодировка UTF-8 565
Класс DataOutputStream 565
Прямой доступ к файлу 566
Упражнение 567
Каналы обмена информацией 567
Сериализация объектов 569
Печать в Java 572
Печать средствами Java 2D 574
Печать файла 578
Печать страниц с разными параметрами 580
Вопросы для самопроверки 582
Глава 24. Сетевые средства Java 583

Работа в WWW 586
Упражнения 589
Работа по протоколу TCP 590
Работа с proxy-сервером 594
Упражнения 594
Работа по протоколу UDP 594
Упражнение 597
Вопросы для самопроверки 597
Часть V. Web-технологии Java 599

Глава 25. Web-инструменты Java 601

Архиватор jar 601
Создание архива 602
Файл описания MANIFEST.MF 604
Файл INDEX.LIST 605
Компоненты JavaBeans 606
Связь с базами данных через JDBC 607
Вопросы для самопроверки 612
Глава 26. Сервлеты 613

Web-приложение 614
Интерфейс Servlet 615
Конфигурационный файл 615
Интерфейс ServletConfig 618
Контекст сервлета 620
Метод Service 621
Интерфейс ServletRequest 621
Интерфейс ServletResponse 623
Цикл работы сервлета 623
Класс GenericServlet 624
Работа по протоколу HTTP 625
Интерфейс HttpServletRequest 625
Интерфейс HttpServletResponse 626
Класс HttpServlet 627
Сеанс связи с сервлетом 634
Фильтры 637
Обращение к другим ресурсам 641
Вопросы для самопроверки 642
Глава 27. Страницы JSP 643

Стандартные действия (теги) JSP 646
Язык записи выражений EL 649
Встроенные объекты JSP 650
Обращение к компоненту JavaBean 652
Выполнение апплета в браузере клиента 654
Передача управления 655
Пользовательские теги 655
Класс-обработчик пользовательского тега 657
Пользовательский тег с атрибутами 660
Пользовательский тег с телом 660
Обработка тела пользовательского тега 662
Обработка взаимодействующих тегов 664
Обработка исключений в пользовательских тегах 668
Обработка тегов средствами JSP 669
Стандартные библиотеки тегов JSTL 671
Библиотека core 671
Библиотека xml 675
Библиотека fmt 675
Библиотека sql 675
Библиотека fn 676
Frameworks 676
JavaServer Faces 677
Вопросы для самопроверки 681
Глава 28. Связь Java с технологией XML 683

Описание DTD 688
Пространства имен XML 690
Схема XML 692
Встроенные простые типы XSD 693
Вещественные числа 693
Целые числа 693
Строки символов 693
Дата и время 694
Двоичные типы 694
Прочие встроенные простые типы 694
Определение простых типов 694
Сужение 695
Список 696
Объединение 697
Описание элементов и их атрибутов 698
Определение сложных типов 698
Определение типа пустого элемента 699
Определение типа элемента с простым телом 699
Определение типа вложенных элементов 700
Определение типа со сложным телом 702
Пример: схема адресной книги 703
Безымянные типы 705
Пространства имен языка XSD 707
Включение файлов схемы в другую схему 709
Связь документа XML со своей схемой 711
Другие языки описания схем 711
Инструкции по обработке 712
Анализ документа XML 712
Анализ документов XML с помощью SAX2 713
Связывание данных XML с объектами Java 720
Объекты данных JDO 721
Анализ документов XML с помощью DOM API 722
Интерфейс Node 723
Интерфейс Document 725
Интерфейс Element 726
Другие DOM-парсеры 729
Преобразование дерева объектов в XML 729
Таблицы стилей XSL 731
Преобразование документа XML в HTML 734