Введение 17
Структура книги 20
Основные навыки и понятия 20
Упражнения для самопроверки 20
Обращение к знатоку 20
Примеры для опробования 20
Навыки программирования 20
Необходимое программное обеспечение 21
Исходный код примеров программ 21
Особая благодарность 21
Другая литература на данную тему 21
От издательства 22
Глава 1. Основы Java 23
Основные навыки и понятия 24
Истоки Java 25
Взаимосвязь Java с языками C и C++ 26
Взаимосвязь Java с языком C# 26
Вклад Java в развитие Интернета 27
Java-апплеты 27
Безопасность 28
Переносимость 28
Волшебный байт-код Java 28
Основные свойства Java 30
Объектно-ориентированное программирование 31
Инкапсуляция 32
Полиморфизм 32
Наследование 33
Установка комплекта Java Development Kit 33
Первая программа на Java 34
Ввод исходного кода программ 35
Компиляция программы 35
Построчный анализ исходного кода первого примера программы 36
Обработка синтаксических ошибок 39
Еще одна простая программа 39
Другие типы данных 41
Пример для опробования 1.1. Преобразование галлонов в литры 43
Два управляющих оператора 44
Оператор if 44
Цикл for 46
Создание кодовых блоков 47
Точки с запятой и оформление исходного текста программы 48
Практическое применение отступов 49
Пример для опробования 1.2. Усовершенствованный вариант преобразования
галлонов в литры 49
Ключевые слова Java 51
Идентификаторы в Java 51
Библиотеки классов Java 52
Упражнение для самопроверки по материалу главы 1 52
Глава 2. Введение в типы данных и операторы 55
Основные навыки и понятия 56
Особое значение типов данных 56
Простые типы данных в Java 56
Целочисленные типы данных 57
Типы данных с плавающей точкой 58
Символы 59
Логический тип данных 61
Пример для опробования 2.1. Расчет расстояния до удара молнии 61
Литералы 62
Шестнадцатеричные, восьмеричные и двоичные литералы 63
Символьные управляющие последовательности 64
Строковые литералы 64
Подробнее о переменных 65
Инициализация переменных 66
Динамическая инициализация 66
Область и срок действия переменных 67
Операторы 69
Арифметические операторы 70
Операторы инкремента и декремента 71
Операторы отношения и логические операторы 72
Укороченные логические операторы 73
Оператор присваивания 75
Укороченные операторы присваивания 75
Преобразование типов при присваивании 77
Приведение несовместимых типов 78
Предшествование операторов 79
Пример для опробования 2.2. Отображение таблицы истинности
для логических операторов 80
Выражения 81
Преобразование типов в выражениях 82
Пробелы и круглые скобки 83
Упражнение для самопроверки по материалу главы 2 84
Глава 3. Управляющие операторы 85
Основные навыки и понятия 86
Ввод символов с клавиатуры 86
Условный оператор if 87
Вложенные условные операторы if 89
Многоступенчатая конструкция if-else-if 90
Оператор switch 91
Вложенные операторы switch 94
Пример для опробования 3.1. Начало построения справочной системы Java 94
Цикл for 97
Некоторые разновидности цикла for 98
Пропуск отдельных частей в определении цикла for 99
Бесконечный цикл 101
Циклы без тела 101
Объявление управляющих переменных в цикле for 102
Расширенный цикл for 102
Цикл while 103
Цикл do-while 104
Пример для опробования 3.2. Расширение справочной системы Java 106
Применение оператора break для выхода из цикла 109
Оператор break в качестве оператора goto 111
Применение оператора continue 114
Пример для опробования 3.3. Завершение построения справочной системы Java 116
Вложенные циклы 119
Упражнение для самопроверки по материалу главы 3 120
Глава 4. Введение в классы, объекты и методы 123
Основные навыки и понятия 124
Основные положения о классах 124
Общая форма определения класса 125
Определение класса 125
Порядок создания объектов 128
Переменные ссылочного типа и присваивание 129
Методы 130
Добавление метода в класс Vehicle 130
Возврат из метода 133
Возврат значения 133
Использование параметров 135
Добавление параметризированного метода в класс Vehicle 137
Пример для опробования 4.1. Создание справочного класса 138
Конструкторы 144
Параметризированные конструкторы 145
Добавление конструктора в класс Vehicle 146
Еще раз об операторе new 147
"Сборка мусора" и методы завершения 148
Метод ?nalize() 148
Пример для опробования 4.2. Демонстрация "сборки мусора"
и завершения кода 149
Ключевое слово this 151
Упражнение для самопроверки по материалу главы 4 153
Глава 5. Дополнительные сведения о типах данных и операторах 155
Основные навыки и понятия 156
Массивы 156
Одномерные массивы 157
Пример для опробования 5.1. Сортировка массива 160
Многомерные массивы 161
Двумерные массивы 162
Нерегулярные массивы 162
Трехмерные, четырехмерные и многомерные массивы 164
Инициализация многомерных массивов 164
Альтернативный синтаксис объявления массивов 165
Присваивание ссылок на массивы 166
Применение переменной экземпляра length 167
Пример для опробования 5.2. Создание класса очереди 169
Разновидность for-each цикла for 173
Циклическое обращение к многомерным массивам 176
Применение расширенного цикла for 177
Символьные строки 178
Построение строк 178
Операции над символьными строками 179
Массивы символьных строк 181
Постоянство строк 182
Применение строк для управления оператором switch 183
Употребление аргументов командной строки 184
Поразрядные операторы 185
Поразрядные операторы И, ИЛИ, исключающее ИЛИ и НЕ 186
Операторы сдвига 190
Поразрядные составные операторы присваивания 192
Пример для опробования 5.3. Создание класса ShowBits 193
Оператор ? 195
Упражнение для самопроверки по материалу главы 5 197
Глава 6. Дополнительные сведения о методах и классах 199
Основные навыки и понятия 200
Управление доступом к членам класса 200

Модификаторы доступа в Java 201
Пример для опробования 6.1. Усовершенствование класса Queue 205
Передача объектов методам 206
Способы передачи аргументов методу 208
Возврат объектов 210
Перегрузка методов 212
Перегрузка конструкторов 217
Пример для опробования 6.2. Перегрузка конструктора класса Queue 218
Рекурсия 221
Применение ключевого слова static 224
Статические блоки 226
Пример для опробования 6.3. Быстрая сортировка 227
Вложенные и внутренние классы 230
Аргументы переменной длины 233
Общие положения об аргументах переменной длины 234
Перегрузка методов с аргументами переменной длины 236
Аргументы переменной длины и неоднозначность 238
Упражнение для самопроверки по материалу главы 6 239
Глава 7. Наследование 241
Основные навыки и понятия 242
Основы наследования 242
Доступ к членам класса и наследование 245
Конструкторы и наследование 248
Применение ключевого слова super для вызова конструктора суперкласса 249
Применение ключевого слова super для доступа к членам суперкласса 253
Пример для опробования 7.1. Расширение класса Vehicle 254
Создание многоуровневой иерархии классов 257
Порядок вызова конструкторов 260
Ссылки на суперкласс и объекты подклассов 261
Переопределение методов 266
Поддержка полиморфизма в переопределяемых методах 268
Причины для переопределения методов 270
Демонстрация механизма переопределения методов на примере
класса TwoDShape 270
Применение абстрактных классов 274
Использование ключевого слова final 278
Предотвращение переопределения методов 278
Предотвращение наследования 279
Применение ключевого слова ?nal к переменным экземпляра 279
Класс Object 281
Упражнение для самопроверки по материалу главы 7 282
Глава 8. Пакеты и интерфейсы 283
Основные навыки и понятия 284
Пакеты 284
Определение пакета 285
Поиск пакета и переменная окружения CLASSPATH 286
Простой пример применения пакета 286
Пакеты и доступ к членам классов 288
Пример доступа к пакету 289
Представление о защищенных членах классов 290
Импорт пакетов 292
Библиотечные классы Java, содержащиеся в пакетах 293
Интерфейсы 294
Реализация интерфейсов 295
Применение интерфейсных ссылок 299
Пример для опробования 8.1. Создание интерфейса для очереди 300
Переменные в интерфейсах 306
Наследование интерфейсов 307
Упражнение для самопроверки по материалу главы 8 308
Глава 9. Обработка исключений 309
Основные навыки и понятия 310
Иерархия исключений 311
Общее представление об обработке исключений 311
Использование ключевых слов try и catch 312
Простой пример обработки исключений 312
Последствия неперехвата исключений 314
Обработка исключений - изящный способ устранения программных ошибок 316
Применение нескольких операторов catch 317
Перехват исключений, генерируемых подклассами 318
Вложенные блоки try 319
Генерирование исключений 320
Повторное генерирование исключений 321
Подробнее о классе Throwable 322
Использование ключевого слова ?nally 324
Использование ключевого слова throws 325
Новые средства обработки исключений, внедренные в версии JDK 7 327
Встроенные в Java исключения 328
Создание подклассов, производных от класса Exception 331
Пример для опробования 9.1. Добавление исключений в класс очереди 333
Упражнение для самопроверки по материалу главы 9 336
Глава 10. Ввод-вывод данных 339
Основные навыки и понятия 340
Организация системы ввода-вывода в Java на потоках 341
Байтовые и символьные потоки 341
Классы байтовых потоков 341
Классы символьных потоков 342
Встроенные потоки 343
Применение байтовых потоков 343
Консольный ввод 345
Вывод на консоль 346
Чтение и запись в файлы из байтовых потоков 347
Ввод данных из файла 347
Вывод в файл 351
Автоматическое закрытие файлов 353
Чтение и запись двоичных данных 356
Пример для опробования 10.1. Утилита сравнения файлов 359
Файлы с произвольным доступом 361
Применение символьных потоков в Java 363
Консольный ввод из символьных потоков 365
Консольный вывод в символьные потоки 367
Ввод-вывод в файлы через символьные потоки 369
Применение класса FileWriter 369
Применение класса FileReader 370
Применение оболочек типов для преобразования символьных строк в числа 371
Пример для опробования 10.2. Создание справочной системы, находящейся
на диске 374
Упражнение для самопроверки по материалу главы 10 381
Глава 11. Многопоточное программирование 383
Основные навыки и понятия 384
Общее представление о многопоточной обработке 384
Класс Thread и интерфейс Runnable 385
Создание потока 386
Несложные усовершенствования многопоточной программы 389
Пример для опробования 11.1.Расширение класса Thread 391
Создание нескольких потоков 393
Определение момента завершения потока 396
Приоритеты потоков 399
Синхронизация 401
Применение синхронизированных методов 402
Синхронизированные блоки 405
Организация взаимодействия потоков с помощью методов notify(), wait() и
notifyAll() 407
Пример применения методов wait() и notify() 408
Приостановка, возобновление и остановка потоков 414
Пример для опробования 11.2. Применение основного потока 418
Упражнение для самопроверки по материалу главы 11 419
Глава 12. Перечисления, автоупаковка, статический импорт
и аннотации 421
Основные навыки и понятия 422
Перечисления 422
Основные положения о перечислениях 423
Перечисления в Java относятся к типам классов 425
Методы values() и valueOf() 425
Конструкторы, методы, переменные экземпляра и перечисления 427
Два важных ограничения 429
Наследование перечислений от класса Enum 429
Пример для опробования 12.1. Автоматизированный светофор 431
Автоупаковка 436
Оболочки типов 436
Основные положения о об автоупаковке 438
Автоупаковка и методы 439
Автоупаковка и автораспаковка в выражениях 440
Предупреждение относительно автоупаковки и автораспаковки 442
Статический импорт 442
Аннотации (метаданные) 445
Упражнение для самопроверки по материалу главы 12 448
Глава 13. Обобщения 451
Основные навыки и понятия 452
Основные положения об обобщениях 452
Простой пример обобщений 453
Действие обобщений распространяется только на объекты 457
Различение обобщений по аргументам типа 457
Обобщенный класс с двумя параметрами типа 457
Общая форма обобщенного класса 459
Ограниченные типы 459
Использование метасимвольных аргументов 462
Ограниченные метасимвольные аргументы 465
Обобщенные методы 468
Обобщенные конструкторы 470
Обобщенные интерфейсы 471
Пример для опробования 13.1. Создание обобщенного класса очереди 473
Базовые типы и устаревший код 477
Выводимость типов с помощью ромбовидного оператора 480
Стирание 481
Ошибки неоднозначности 482
Ограничения, накладываемые на обобщения 483
Невозможность получить экземпляры параметров типа 483
Ограничения, накладываемые на статические члены класса 483
Ограничения, накладываемые на обобщенные массивы 484
Ограничения, накладываемые на обобщенные исключения 485
Дальнейшее изучение обобщений 485
Упражнение для самопроверки по материалу главы 13 485
Глава 14. Апплеты, события и прочее 487
Основные навыки и понятия 488
Общее представление об апплетах 488
Организация апплета и его основные элементы 491
Архитектура апплетов 491
Заготовка апплета 492
Инициализация и завершение апплетов 493
Запрос на перерисовку окна апплета 494
Метод update() 495
Пример для опробования 14.1. Простой апплет для формирования крупного
заголовка на веб-странице 495
Применение строки состояния 499
Передача параметров апплету 500
Класс Applet 501
Обработка событий 503
Модель делегирования событий 503
События 504
Источники событий 504
Приемники событий 504
Классы событий 505
Интерфейсы приемников событий 505
Применение модели делегирования событий 506
Обработка событий от мыши 507
Простой пример апплета, демонстрирующий обработку событий от мыши 508
Другие ключевые слова Java 510
Модификаторы transient и volatile 511
Ключевое слово instanceof 511
Ключевое слово strictfp 511
Ключевое слово assert 512
Собственные методы 513
Упражнение для самопроверки по материалу главы 14 514
Глава 15. Введение в Swing 517
Основные навыки и понятия 518
Происхождение и принципы конструирования Swing 519
Компоненты и контейнеры 521
Компоненты 521
Контейнеры 522
Панели контейнеров верхнего уровня 522
Диспетчеры компоновки 523
Первая простая Swing-программа 523
Построчный анализ первой Swing-программы 525
Применение компонента JButton 529
Работа с компонентом JTextField 533
Создание флажков с помощью компонента JCheckBox 537
Работа с компонентом Jlist 540
Пример для опробования 15.1. Утилита сравнения файлов, создаваемая
на основе Swing 544
Применение анонимных внутренних классов для обработки событий 549
Создание апплета средствами Swing 550
Что делать дальше 552
Упражнения для самопроверки по материалу главы 15 553
Приложение А. Ответы на вопросы для самопроверки 555
Глава 1. Основы Java 556
Глава 2. Введение в типы данных и операторы 558
Глава 3. Управляющие операторы 559
Глава 4. Введение в классы, объекты и методы 562
Глава 5. Дополнительные сведения о типах данных и операторах 563
Глава 6. Дополнительные сведения о методах и классах 567
Глава 7. Наследование 571
Глава 8. Пакеты и интерфейсы 573
Глава 9. Обработка исключений 575
Глава 10. Ввод-вывод данных 578
Глава 11. Многопоточное программирование 581
Глава 12. Перечисления, автоупаковка, статический импорт и аннотации 583
Глава 13. Обобщения 587
Глава 14. Апплеты, события и прочее 591
Глава 15. Введение в Swing 596
Приложение Б.Применение документирующих комментариев в Java 603
Дескрипторы javadoc 604
Дескриптор @author 605
Дескриптор {@code} 605
Дескриптор @deprecated 605
Дескриптор {@docRoot} 606
Дескриптор @exception 606
Дескриптор {@inheritDoc} 606
Дескриптор {@link} 606
Дескриптор {@linkplain} 606
Дескриптор {@literal} 606
Дескриптор @param 606
Дескриптор @return 607
Дескриптор @see 607
Дескриптор @serial 607
Дескриптор @serialData 607
Дескриптор @serialField 607
Дескриптор @since 608
Дескриптор @throws 608
Дескриптор @value 608
Дескриптор @version 608
Общая форма документирующих комментариев 608
Результат, выводимый утилитой javadoc 609
Пример применения документирующих комментариев 609
Предметный указатель 611