Java. Полное руководство. 8-е издание. С. Н. Тригуб Перевод с английского и редакция
Скачать 25.04 Mb.
|
ББК 32.973.26-018.2.75 Ш УДК Издательский дом “Вильямс” Зав. редакцией С.Н. Тригуб Перевод с английского и редакция В.А. Коваленко По общим вопросам обращайтесь в Издательский дом “Вильямс” по адресу info@williamspublishing.com, http:/ Ш илдт, Герберт. Ш57 Java. Полное руководство, е изд Перс англ. — М .: ООО “И.Д. Вильямс”, 2012. — 1104 сил Парал. тит. англ 978-5-8459-1759-1 (рус.) ББК Все названия программных продуктов являются зарегистрированными торговыми марками соответствующих фирм. Никакая часть настоящего издания нив каких целях не может быть воспроизведена в какой бы тони было форме и какими бы тони было средствами, будь то электронные или механические, включая фотокопирование и запись на магнитный носитель, если на это нет письменного разрешения издательства Osborne Media. Authorized translation from the English language edition published by McGraw-Hill Companies, Copyright © 2011. All rights reserved. Except as permitted under the Copyright Act of 1976, no part of this publication may be reproduced or distributed in any form or by any means, or stored in a database or retrieval system, without the prior written permission of Publisher, with the exception that the program listings may be entered, stored, and executed in a computer system, but they may not be reproduced for publication. Oracle and Java are registered trademarks of Oracle Corporation a n d /o r its affiliates. Russian language edition published by Williams Publishing House according to the Agreement with R&I Enterprises International, Copyright © 2012 Научно-популярное издание Герберт Ш илдт Java. Полное руководство 8-е издание Литературный редактор ЕД. Давидян Верстка О.В. Мигиутпина Художественный редактор Е.П. Дынник Корректор Л.А. Гордиенко Подписано в печать 10.02.2012. Формат 70x100/16. Гарнитура Times. Печать офсетная. Уел. печ. л. 89,01. Уч.-изд. л. Тираж 1500 экз. Заказ № Первая Академическая типография Наука, Санкт-Петербург, я линия ВО, д. ООО И. Д. Вильямс”, 127055, г. Москва, ул. Лесная, д. 43, стр. 1 ISBN 978-5-8459-1759-1 (рус) © Издательский дом “Вильямс”, 2012 ISBN 978-0-07-160630-1 (англ) © by The McGraw-Hill Companies, 2011 Оглавление Введение Часть I. Язык Глава 1. История и развитие языка Java Глава 2. Обзор языка Java Глава 3. Типы данных, переменные и массивы Глава 4. Операторы Глава 5. Управляющие операторы Глава 6. Знакомство с классами Глава 7. Более пристальный взгляд на методы и классы Глава 8. Наследование Глава 9. Пакеты и интерфейсы Глава 10. Обработка исключений Глава 11. Многопоточное программирование Глава 12. Перечисления, автоупаковка и аннотации (метаданные) Глава 13. Ввод-вывод, аплеты и другие темы Глава 14. Обобщения Часть II. Библиотека Java Глава 15. Обработка строк Глава 16. Пакет j a v a . la n g Глава 17. Пакет j av a . u t i l : инфраструктура Framework Глава 18. Пакет j ava . u t i l : прочие служебные классы Глава 19. Ввод-вывод: пакет j a v a . i o Глава 20. Исследование NIO Глава 21. Сеть Глава 22. Класс A p p let Глава 23. Обработка событий Глава 24. Введение в библиотеку AWT: работа с окнами, графикой и текстом 745 Глава 25. Использование элементов управления, диспетчеров компоновки и меню библиотеки AWT Глава 26. Изображения Глава 27. Параллельные утилиты Глава 28. Регулярные выражения и другие пакеты Часть III. Разработка программного обеспечения с использованием Java Глава 29. Компоненты Java Bean Глава 30. Введение в библиотеку Swing Глава 31. Дополнительные сведения о библиотеке Swing Глава 32. Сервлеты Часть IV. Применение Java Глава 33. Финансовые аплеты и сервлеты Глава 34. Создание утилиты загрузки на языке Java Приложение. Использование комментариев документации Предметный указатель 1093 Содержание Об авторе О техническом редакторе Книга для всех программистов Введение Что внутри Коды примеров доступны в веб Особые благодарности Для дальнейшего изучения Соглашения, принятые в этой книге От издательства Часть I. Язык Java зз Глава 1. История и развитие языка Java Происхождение языка Java Зарождение современного программирования язык С Следующий шаг язык C++ Предпосылки создания языка Java Создание языка Java Связь с языком C# Как язык Java изменил Интернет 41 Аплеты Java Безопасность Переносимость Магия Java: код виртуальной машины 42 Сервлеты: серверные программы Java Терминология, связанная с Java Простота Объектная ориентированность Устойчивость М ногопоточность Архитектурная нейтральность 46 Интерпретируемость и высокая производительность Распределенный характер Динамический характер Эволюция языка Java 47 Java SE 7 Культура инновации Глава 2. Обзор языка Java О бъектно-ориентированное программирование Две концепции Абстракция Три принципа ООП Первый пример простой программы Ввод кода программы Компиляция программы Более подробное рассмотрение первого примера программы Второй пример короткой программы Два управляющих оператора Оператор i f Цикл f o r Использование блоков кода Вопросы лексики Отступ Идентификаторы Литералы Комментарии Разделители Ключевые слова Java Библиотеки классов Java Глава 3. Типы данных, переменные и массивы 71 Java — строго типизированный язык Элементарные типы Целочисленные значения Тип b y t e Тип s h o r t Тип i n t Тип lo n g Типы с плавающей точкой Тип f l o a t Тип d o u b le Символы Булевы значения Более подробное рассмотрение литералов Целочисленные литералы Литералы с плавающей точкой Булевы литералы Символьные литералы Строковые литералы Переменные Объявление переменной Динамическая инициализация Область видимости и продолжительность существования переменных Содержание 7 8 Содержание Преобразование и приведение типов Автоматическое преобразование типов в Java Приведение несовместимых типов Автоматическое повышение типа в выражениях Правила повышения типа Массивы Одномерные массивы Многомерные массивы Альтернативный синтаксис объявления массивов Несколько слово строках Замечание по поводу указателей для программистов на C/C++ Глава 4. Операторы Арифметические операторы Основные арифметические операторы Оператор деления по модулю Составные арифметические операторы с присваиванием Инкремент и декремент Побитовые операторы Побитовые логические операторы Сдвиг влево Сдвиг вправо Сдвиг вправо без учета знака Операторы сравнения Логические операторы Сокращенные логические операторы Оператор присваивания Оператор ? Приоритет операторов Использование круглых скобок Глава 5. Управляющие операторы Операторы выбора Оператор i f Оператор s w i t c h Операторы цикла Цикл w h i l e Цикл d o - w h i le Цикл f o r Вложенные циклы Операторы перехода Использование оператора b r e a k Использование оператора c o n t i n u e Оператор r e t u r n Глава 6. Знакомство с классами Основы классов Общая форма класса Простой класс Объявление объектов 149 Содержание Подробное рассмотрение оператора new Присваивание переменных объектных ссылок Знакомство с методами Добавление метода к классу Box Возвращение значения Добавление метода, принимающего параметры Конструкторы Конструкторы с параметрами Ключевое слово t h i s Сокрытие переменной экземпляра Сбор мусора Метод f i n a l i z e () Класс S ta c k Глава 7. Более пристальный взгляд на методы и классы Перегрузка методов Перегрузка конструкторов Использование объектов в качестве параметров Более пристальный взгляд на передачу аргументов Возврат объектов Рекурсия Введение в управление доступом Что такое s t a t i c Знакомство с ключевым словом f i n a l Повторное рассмотрение массивов Представление вложенных и внутренних классов Описание класса S t r i n g Использование аргументов командной строки Список аргументов переменной длины Перегрузка методов с переменным количеством аргументов Переменное количество аргументов и неопределенность Глава 8. Наследование Основы наследования Доступ к членами наследование Более реальный пример Переменная суперкласса может ссылаться на объект подкласса Использование ключевого слова s u p e r Использование ключевого слова s u p e r для вызова конструкторов суперкласса Второе применение ключевого слова s u p e r Создание многоуровневой иерархии Порядок вызова конструкторов Переопределение методов Динамическая диспетчеризация методов Для чего нужны переопределенные методы Использование переопределения методов Использование абстрактных классов Использование ключевого слова f i n a l в сочетании с наследованием 216 1 0 Содержание Использование ключевого слова final для предотвращения переопределения Использование ключевого слова f i n a l для предотвращения наследования Класс Object Глава 9. Пакеты и интерфейсы Пакеты Определение пакета Поиск пакетов и переменная среды CLASSPATH Краткий пример пакета Защита доступа Пример защиты доступа Импорт пакетов Интерфейсы Определение интерфейса Реализация интерфейсов Доступ к реализациям через ссылки на интерфейсы Вложенные интерфейсы Использование интерфейсов Переменные в интерфейсах Возможность расширения интерфейсов Глава 10. Обработка исключений Основы обработки исключений Типы исключений Необработанные исключения Использование блоков t r y и c a t c h Отображение описания исключения Множественные операторы c a t c h Вложенные операторы t гу Встроенные исключения Java Создание собственных подклассов исключений Сцепленные исключения Три новых средства исключений JDK 7 Использование исключений Глава 11. Многопоточное программирование Модель потоков Java Приоритеты потоков Синхронизация Обмен сообщениями Класс Thread и интерфейс Runnable Главный поток Создание потока Реализация интерфейса Runnable Расширение класса Thread Выбор подхода Создание множества потоков Использование методов is Alive () и join () 269 Приоритеты потоков Синхронизация Использование синхронизированных методов Оператор s y n c h r o n i z e d 275 Межпотоковые коммуникации Взаимная блокировка Приостановка, возобновление и останов потоков Приостановка, возобновление и останов потоков в Java 1.1 и более ранних версиях Современный способ приостановки, возобновления и остановки потоков Получение состояния потока Использование многопоточности Глава 12. Перечисления, автоупаковка и аннотации (метаданные) Перечисления Основные понятия о перечислениях Методы values () и valueOf () Перечисления в Java являются типами классов Перечисления наследуются от класса Enum Еще один пример перечисления Оболочки типов Оболочки числовых типов 298 Автоупаковка 300 Автоупаковка и методы 300 Автоупаковка и распаковка в выражениях 301 Автоупаковка и распаковка значений классов Boolean и Character 303 Автоупаковка и распаковка помогают предотвратить ошибки Предостережения Аннотации (метаданные) Основы аннотирования Политика удержания аннотации Получение аннотаций вовремя выполнения с использованием рефлексии Второй пример применения рефлексии Получение всех аннотаций Интерфейс Использование значений по умолчанию 311 Аннотация-маркер Одночленные аннотации Встроенные аннотации Некоторые ограничения Глава 13. Ввод-вывод, аплеты и другие темы Основы ввода-вывода Потоки Байтовые и символьные потоки Классы байтовых потоков Содержание 11 1 2 Содержание Классы символьных потоков Предопределенные потоки Чтение консольного ввода Чтение символов Чтение строк Запись консольного вывода Класс PrintWriter Чтение и запись файлов Автоматическое закрытие файла Основы организации аплетов Модификаторы и volatile Использование оператора instanceof 337 Машинно-зависимые методы Проблемы, связанные с машинно-зависимыми методами Использование ключевого слова a s s e r t Параметры включения и отключения утверждений Статический импорт Вызов перегруженных конструкторов через this () Глава 14. Обобщения Что такое обобщения Простой пример обобщения Обобщения работают только с объектами Отличие обобщенных типов в зависимости от аргументов типа Обобщения повышают безопасность типов Обобщенный класс с двумя параметрами типа Общая форма обобщенного класса Ограниченные типы Использование шаблонов аргументов Ограниченные шаблоны Создание обобщенного метода Обобщенные конструкторы Обобщенные интерфейсы Базовые типы и унаследованный код Иерархии обобщенных классов Использование обобщенного суперкласса Обобщенный подкласс Сравнение типов обобщенной иерархии вовремя выполнения Приведение Переопределение методов в обобщенном классе Выведение типов и обобщения Очистка 384 Методы-мосты Ошибки неоднозначности Некоторые ограничения обобщений Нельзя создавать экземпляр типа параметра Ограничения на статические члены Ограничения обобщенных массивов Ограничения обобщенных исключений 390 Часть II. Библиотека Java Глава 15. Обработка строк Конструкторы строк Длина строки Специальные строковые операции Строковые литералы Конкатенация строк Конкатенация строк с другими типами данных Преобразование строки метод toString () Извлечение символов Метод charAt () Метод getChars () Метод get Bytes () Метод toCharArray () Сравнение строк Методы equals () и equalsIgnoreCase () Метод regionMatches () Методы startsWith () и endsWith () Сравнение метода equals () и оператора == Метод сошрагеТо () Поиск строк Модификация строк Метод substring () Метод с one at () Метод replace () Метод t r i m () Преобразование данных с помощью метода valueOf () Изменение регистра символов в строке Дополнительные методы класса String Класс StringBuffег Конструкторы класса StringBuffer Методы length () и capacity () Метод ensureCapacity () Метод setLength () Методы charAt () и setCharAt () Метод getChars () Метод append () Метод insert () Метод reverse () Методы delete () и deleteCharAt () Метод replace () Метод substring () Дополнительные методы класса StringBuffer Класс StringBuilder Глава 16. Пакет j a v a . l a n g Оболочки элементарных типов Класс Number Классы Double и Float Содержание 1 3 1 4 Содержание Методы islnf inite () и isNaN () Классы Byte, Short, Integer и Long Преобразование чисел в строки и обратно Класс Character Дополнения к классу Character для поддержки кодовых точек U nicode Класс Boolean Класс Void Класс Process Класс Runtime Управление памятью Выполнение других программ Класс ProcessBuilder Класс System Использование метода currentTimeMills (для измерения времени выполнения программы Использование метода а г га ус ору) Свойства окружения Класс Object Использование метода clone () и интерфейса Класс Class Класс ClassLoader Класс Math Тригонометрические функции Экспоненциальные функции Функции округления Прочие методы класса Math Класс StrictMath Класс Compiler Классы Thread, ThreadGroup и интерфейс Runnable Интерфейс Runnable Класс Thread Класс ThreadGroup Классы ThreadLocal и InheritableThreadLocal Класс Package Класс RuntimePermission Класс Throwable Класс SecurityManager Класс StackTraceElement Класс Enum Класс ClassValue Интерфейс Интерфейс Интерфейс Appendable Интерфейс Интерфейс Интерфейс Интерфейс Вложенные пакеты j ava. lang Пакет java.lang.annotation 471 Пакет j a v a . l a n g . i n s t r u m e n t Пакет j a v a . l a n g . in v o k e Пакет j a v a . l a n g . m anagem ent Пакет j a v a . l a n g . r e f Пакет j a v a . l a n g . r e f l e c t Глава 17. Пакет j a v a . u t i l : инфраструктура ollections Framework Обзор коллекций Комплект JDK 5 изменил инфраструктуру Collections Framework Обобщенные определения фундаментально изменили инфраструктуру коллекций Средства автоматической упаковки используют элементарные типы 476 Стиль цикла “for-each” Интерфейсы коллекций Интерфейс Collection Интерфейс List Интерфейс Интерфейс Интерфейс Интерфейс Queue Интерфейс Dequeue Классы коллекций Класс ArrayList Класс LinkedList Класс HashSet Класс LinkedHashSet Класс TreeSet Класс PriorityQueue Класс ArrayDeque Класс EnumSet Доступ к коллекциям через итератор Использование интерфейса Версия “for-each” цикла for как альтернатива итераторам Использование пользовательских классов в коллекциях Интерфейс RandomAc cess Работа с картами Интерфейсы карт Классы карт Компараторы Использование компараторов Алгоритмы коллекций Класс Arrays Зачем нужны обобщенные коллекции Унаследованные классы и интерфейсы Интерфейс Enumeration Класс Vector Класс Stack Класс Dictionary Содержание 1 5 1 6 Содержание Класс Hashtable Класс Properties Использование методов store () и load () Заключительные соображения по поводу коллекций Глава 18. Пакет j ava . u t i l : прочие служебные классы Класс StringTokenizer Класс Класс Date Класс Calendar Класс GregorianCalendar Класс TimeZone Класс SimpleTimeZone Класс Locale Класс Random Класс Observable Интерфейс Observer Пример использования интерфейса Классы Timer и TimerTask Класс Currency Класс Formatter Конструкторы класса Formatter Методы класса F о г та 11 е г Основы форматирования Форматирование строки символов Форматирование чисел Форматирование времени и даты Спецификаторы пи Указание минимальной ширины поля Указание точности Использование флагов формата Выравнивание вывода Флаги пробела, + , 0 и ( Флаг запятая Флаг # Параметры верхнего регистра Использование индекса аргументов Закрытие объекта класса Formatter Подключение функции Java print f () Класс Scanner Конструкторы класса Scanner Основы сканирования Некоторые примеры применения класса Scanner Установка разделителей Прочие возможности класса Scanner Классы ResourceBundle, ListResourceBundle и PropertyResourceBundle Прочие служебные классы и интерфейсы Вложенные пакеты j ava .util 593 Содержание 1 Пакеты java.util.concurrent,java.util.concurrent.atomic, java.util.concurrent.locks Пакет java. ut i 1 j ar Пакет java.util.logging Пакет java.util.prefs Пакет java.util.regex Пакет java .util. spi 594 naKeTjava.util.zip Глава 19. Ввод-вывод: пакет j a v a . i o Классы и интерфейсы ввода-вывода Java Класс File Каталоги Использование интерфейса Альтернатива — метод listFilesO Создание каталогов Интерфейсы и Flushable Исключения ввода-вывода Два способа закрытия потока Классы потоков Байтовые потоки Класс Input St ream Класс Output Stream Класс FilelnputStream Класс FileOutputStream Класс ByteArraylnputStream Класс ByteArrayOutputStream Фильтруемые потоки байтов 613 Буферизуемые потоки байтов ' Символьные потоки Класс Reader Класс Writer Класс FileReader Класс Fi 1 eWriter Класс CharArrayReader Класс CharArrayWriter Класс BufferedReader Класс BufferedWriter Класс PushbackReader Класс PrintWriter Класс Console 631 Сериализация Интерфейс Serializable Интерфейс Интерфейс Класс Obj ectOutputStream Интерфейс Класс Obj ectInputStream Пример сериализации Преимущества потоков 639 1 8 Содержание |