Предисловие 13
Java SE5 и SE6 14
Благодарности 14
Глава 1. Введение в объекты 17
Развитие абстракции 18
Объект имеет интерфейс 20
Объект предоставляет услуги 22
Скрытая реализация 23
Повторное использование реализации 24
Наследование 25
Взаимозаменяемые объекты и полиморфизм 29
Однокорневая иерархия 33
Контейнеры 33
Параметризованные типы 35
Создание, использование объектов и время их жизни 36
Обработка исключений: борьба с ошибками 38
Параллельное выполнение 38
Java и Интернет 39
Резюме 47
Глава 2. Все является объектом 48
Для работы с объектами используются ссылки 48
Все объекты должны создаваться явно 49
Объекты никогда не приходится удалять 53
Создание новых типов данных 54
Методы, аргументы и возвращаемые значения 56
Создание программы на Java 58
Ключевое слово static 60
Наша первая программа на Java 61
Комментарии и встроенная документация 64
Стиль оформления программ 70
Резюме 70
Глава 3. Операторы 71
Простые команды печати 71
Операторы Java 72
Литералы 82
В Java отсутствует sizeof() 92
Резюме 100
Глава 4. Управляющие конструкции 101
Синтаксис foreach 105
return 107
break и continue 108
Нехорошая команда goto 109
Резюме 115
Глава 5. Инициализация и завершение 116
Конструктор гарантирует инициализацию 116
Перегрузка методов 118
Очистка: финализация и сборка мусора 130
Инициализация членов класса 137
Инициализация конструктором 140
Инициализация массивов 146
Резюме 151
Глава 6. Управление доступом 152
Пакет как библиотечный модуль 153
Спецификаторы доступа Java 159
Интерфейс и реализация 163
Доступ к классам 164
Резюме 167
Глава 7. Повторное использование классов 169
Синтаксис композиции 170
Синтаксис наследования 172
Делегирование 176
Сочетание композиции и наследования 178
Композиция в сравнении с наследованием 184
protected 185
Восходящее преобразование типов 186
Ключевое слово final 188
Инициализация и загрузка классов 195
Резюме 197
Глава 8. Полиморфизм 198
Снова о восходящем преобразовании 199
Особенности 201
Конструкторы и полиморфизм 208
Ковариантность возвращаемых типов 216
Разработка с наследованием 217
Резюме 220
Глава 9. Интерфейсы 221
Абстрактные классы и методы 221
Интерфейсы 224
Отделение интерфейса от реализации 227
Расширение интерфейса через наследование 233
Интерфейсы как средство адаптации 236
Вложенные интерфейсы 239
Интерфейсы и фабрики 242
Резюме 244
Глава 10. Внутренние классы 245
Создание внутренних классов 245
Связь с внешним классом 246
Конструкции .this и .new 248
Внутренние классы и восходящее преобразование 249
Безымянные внутренние классы 253
Внутренние классы: зачем? 261
Наследование от внутренних классов 272
Можно ли переопределить внутренний класс? 272
Локальные внутренние классы 274
Резюме 276
Глава 11. Коллекции объектов 277
Параметризованные и типизованные контейнеры 277
Основные концепции 280
Добавление групп элементов 281
List 285
Итераторы 288
LinkedList 291
Стек 292
Множество 294
Карта 296
Очередь 298
PriorityQueue 299
Collection и Iterator 301
Идиома «метод-адаптер» 306
Резюме 309
Глава 12. Обработка ошибок и исключения 310
Основные исключения 310
Перехват исключений 312
Создание собственных исключений 314
Спецификации исключений 319
Перехват произвольных исключений 320
Стандартные исключения Java 328
Завершение с помощью finally 330
Использование finally с return 334
Ограничения при использовании исключений 336
Конструкторы 339
Идентификация исключений 343
Альтернативные решения 344
Резюме 351
Глава 13. Информация о типах 352
Необходимость в динамическом определении типов (RTTI) 352
Регистрация фабрик 372
Рефлексия: динамическая информация о классе 376
Динамические посредники 380
Объекты с неопределенным состоянием 384
Интерфейсы и информация о типах 390
Резюме 394
Глава 14. Параметризация 397
Простая параметризация 398
Параметризованные интерфейсы 404
Параметризованные методы 407
Построение сложных моделей 419
Ограничения 437
Метасимволы 440
Резюме 452
Глава 15. Массивы 454
Особенности массивов 454
Массив как объект 456
Возврат массива 458
Многомерные массивы 460
Массивы и параметризация 463
Создание тестовых данных 465
Создание массивов с использованием генераторов 470
Вспомогательный инструментарий Arrays 474
Резюме 482
Глава 16. Система ввода/вывода Java 483
Класс File 484
Ввод и вывод 489
Добавление атрибутов и интерфейсов 491
Классы Reader и Writer 494
RandomAccessFile: сам по себе 497
Типичное использование потоков ввода/вывода 498
Средства чтения и записи файлов 505
Стандартный ввод/вывод 507
Новый ввод/вывод (nio) 510
Сжатие данных 531
Сериализация объектов 536
Предпочтения 553
Резюме 555
Глава 17. Параллельное выполнение 557
Класс Thread 559
Исполнители 561
Совместное использование ресурсов 578
Взаимодействие между потоками 598
Взаимная блокировка 602
Новые библиотечные компоненты 607
CountDownLatch 607
CyclicBarrier 609
DelayQueue 611
PriorityBlockingQueue 614
Семафоры 619
Exchanger 623
Моделирование 624
Резюме 629
Алфавитный указатель 631