JAVA 2
.pdfП.Ноутон, Г.Шилдт
JAVA 2
Подробно излагаются основы нового платформно-независимого. объектноориентированного языка программирования Java 2, приведено описание библиотек его классов и методики разработки приложений, апплетов и сервлетов с помощью Java-подсистем Bean и Swing, а также способы миграции приложений из C/C++ . В книге рассматриваются интересные и сложные Java-приложения, в том числе многопользовательская сетевая игра в слова (word game). Изложение сопровождается огромным числом примеров и законченных программ, листинги которых Вы можете найти по адресу http://www.osborne.com.
Содержание |
|
Об авторах |
1 |
Благодарности |
3 |
Предисловие |
5 |
ЧАСТЫ. ЯЗЫК JAVA |
9 |
Глава 1. Генезис Java |
11 |
Происхождение Java |
11 |
Рождение современного программирования: C |
12 |
Потребность в C++ |
13 |
Этап становления Java |
15 |
Создание Java |
15 |
Почему Java важен для Internet |
17 |
Java-апплеты и приложения |
18 |
Защита |
18 |
Мобильность |
19 |
Волшебство Java: байт-код |
19 |
Базовые термины Java |
21 |
Простой |
21 |
Объектно-ориентированный |
22 |
Устойчивый |
22 |
Многопоточный |
23 |
Архитектурно-независимый |
23 |
Интерпретируемость и высокая эффективность |
23 |
Распределенный |
24 |
Динамический |
24 |
Продолжение революции |
24 |
Свойства, добавленные версией 1.1 |
25 |
Свойства, исключенные из версии 1.1 |
25 |
Свойства, добавленные версией 2 |
26 |
Свойства, исключенные из версии 2 |
27 |
Java — не расширение HTML |
27 |
Глава 2. Обзор языка Java |
29 |
Объектно-ориентированное программирование |
29 |
Две парадигмы программирования |
29 |
Абстракция |
30 |
Три принципа ООП |
31 |
Первая простая программа |
37 |
Ввод программы |
37 |
Компиляция программы |
38 |
Подробный взгляд на первую программу |
39 |
Вторая короткая программа |
41 |
Два оператора управления |
43 |
Оператор if |
43 |
Цикл for |
45 |
Использование блоков кода |
46 |
Лексические вопросы |
48 |
Пробельные символы |
48 |
Идентификаторы |
48 |
Константы |
49 |
Комментарии |
49 |
Разделители |
49 |
Ключевые слова языка Java |
50 |
Библиотеки классов языка Java |
51 |
Глава 3. Типы данных, переменные и массивы |
52 |
Java — язык со строгой типизацией |
52 |
Простые типы |
53 |
Целые типы |
53 |
Тип byte |
54 |
Тип short |
55 |
Тип int |
55 |
Тип long |
56 |
Типы с плавающей точкой |
56 |
Тип float |
57 |
Тип double |
57 |
Символьный тип (char) |
58 |
Булевский тип (boolean) |
59 |
Подробнее о литералах |
60 |
Целочисленные литералы |
60 |
Литералы с плавающей точкой |
61 |
Булевы литералы |
62 |
Символьные литералы |
62 |
Строковые литералы |
63 |
Переменные |
63 |
Объявление переменной |
63 |
Динамическая инициализация |
64 |
Область действия и время жизни переменных |
65 |
Преобразование и приведение типов |
68 |
Автоматическое преобразование типов в Java |
68 |
Приведение несовместимых типов |
69 |
Автоматическое расширение типа в выражениях |
70 |
Правила расширения типов |
71 |
Массивы |
72 |
Одномерные массивы |
72 |
Многомерные массивы |
75 |
Альтернативный синтаксис объявления массива |
80 |
Несколько слов относительно строк |
80 |
Замечание для программистов C/C++ по поводу указателей |
81 |
Глава 4. Операции |
82 |
Арифметические операции |
82 |
Основные арифметические операции |
83 |
Деление по модулю |
84 |
Арифметические операции присваивания |
85 |
Инкремент и декремент |
86 |
Поразрядные операции |
88 |
Поразрядные логические операции |
90 |
Левый сдвиг |
92 |
Правый сдвиг |
94 |
Правый сдвиг без знака |
96 |
Поразрядная операция присваивания |
97 |
Операции отношений |
98 |
Операции булевой логики |
100 |
Короткие логические операции |
102 |
Операция присваивания |
102 |
Условная операция |
103 |
Старшинство операций |
104 |
Использование круглых скобок |
105 |
Глава 5. Управляющие операторы |
106 |
Операторы выбора Java |
106 |
Оператор if |
106 |
Оператор switch |
110 |
Операторы цикла |
115 |
Оператор цикла while |
115 |
Оператор цикла do while |
117 |
Оператор цикла for |
120 |
Вложенные циклы |
125 |
Операторы перехода |
125 |
Использование оператора break |
126 |
Использование оператора continue |
130 |
Оператор return |
132 |
Глава 6. Введение в классы |
133 |
Основы классов |
133 |
Общая форма класса |
134 |
Простой класс |
135 |
Объявление объектов |
138 |
Операция new |
139 |
Назначение ссылочных переменных объекта |
140 |
Представление методов |
141 |
Добавление метода к классу Box |
142 |
Возврат значений |
144 |
Добавление метода с параметрами |
146 |
Конструкторы |
148 |
Параметризованные конструкторы |
150 |
Ключевое слово this |
152 |
Скрытие переменной экземпляра |
152 |
Сборка "мусора" |
153 |
Метод finalize() |
153 |
Класс Stack |
154 |
Глава 7. Методы и классы |
158 |
Перегрузка методов |
158 |
Перегрузка конструкторов |
162 |
Использование объектов в качестве параметров |
164 |
Передача аргументов |
167 |
Возврат объектов |
169 |
Рекурсия |
170 |
Управление доступом |
172 |
Статические элементы |
177 |
Спецификатор final |
179 |
Ревизия массивов |
179 |
Вложенные и внутренние классы |
181 |
Класс String |
185 |
Использование аргументов командной строки |
188 |
Глава 8. Наследование |
189 |
Основы наследования |
189 |
Доступ к элементам и наследование |
191 |
Практический пример |
192 |
Переменная суперкласса может ссылаться на объект подкласса |
195 |
Использование ключевого слова super |
196 |
Вызов конструктора суперкласса с помощью первой формы super |
196 |
Использование второй формы super |
200 |
Создание многоуровневой иерархии |
201 |
Когда вызываются конструкторы |
204 |
Переопределение методов |
205 |
Динамическая диспетчеризация методов |
208 |
Зачем нужны переопределенные методы? |
210 |
Применение переопределения методов |
211 |
Использование абстрактных классов |
212 |
Использование ключевого слова final с наследованием |
216 |
Использование final для отказа от переопределения |
216 |
Использование final для отмены наследования |
217 |
Класс Object |
217 |
Глава 9. Пакеты и интерфейсы |
219 |
Пакеты |
220 |
Определение пакета |
220 |
Использование CLASSPATH |
221 |
Короткий пример пакета |
222 |
Зашита доступа |
223 |
Пример управления доступом |
224 |
Импорт пакетов |
228 |
Интерфейсы |
230 |
Определение интерфейса |
231 |
Реализация интерфейсов |
232 |
Применения интерфейсов |
235 |
Переменные в интерфейсах |
239 |
Расширение интерфейсов |
241 |
Глава 10. Обработка исключений |
243 |
Основные принципы обработки исключений |
243 |
Типы исключений |
244 |
Неотловленные исключения |
245 |
Использование операторов try и catch |
246 |
Отображение описания исключения |
248 |
Множественные операторы catch |
249 |
Вложенные операторы try |
251 |
Оператор throw |
253 |
Методы с ключевым словом throws |
255 |
Блок finally |
256 |
Встроенные исключения Java |
258 |
Создание собственных подклассов исключений |
260 |
Использование исключений |
262 |
Глава 11. Многопоточное программирование |
263 |
Поточная модель Java |
264 |
Приоритеты потоков |
265 |
Синхронизация |
266 |
Передача сообщений |
266 |
Класс Thread и интерфейс Runnable |
267 |
Главный поток |
268 |
Создание потока |
270 |
Реализация интерфейса Runnable |
270 |
Расширение Thread |
272 |
Выбор подхода |
^74 |
Создание множественных потоков |
274 |
Использование методов isAlive() и join() |
276 |
Приоритеты потоков |
?78 |
Синхронизация |
281 |
Использование синхронизированных методов |
282 |
Оператор synchronized |
284 |
Межпоточные связи |
786 |
Блокировка |
791 |
Приостановка, возобновление и остановка потоков |
794 |
Приостановка, возобновление и остановка потоков в Java 1.1 и более |
794 |
ранних версиях |
|
Приостановка, возобновление и остановка потока в Java 2 |
297 |
Использование многопоточности |
299 |
Глава 12. Ввод/вывод, апплеты и другие темы |
301 |
Основы ввода/вывода |
301 |
Потоки |
302 |
Байтовые и символьные потоки |
302 |
Предопределенные потоки |
305 |
Чтение консольного ввода |
306 |
Чтение символов |
307 |
Чтение строк |
308 |
Запись консольного вывода |
309 |
Класс PrintWriter |
310 |
Чтение и запись файлов |
312 |
Апплеты. Основы программирования |
315 |
Модификаторы transient и volatile |
319 |
Использование instanceof |
319 |
Ключевое слово strictfp |
322 |
Native-методы |
323 |
Проблемы native-методов |
327 |
ЧАСТЬ II. БИБЛИОТЕКА JAVA |
329 |
Глава 13. Обработка строк |
331 |
String-конструкторы |
332 |
Длина строки |
334 |
Специальные строковые операции |
334 |
Строковые литералы |
335 |
Конкатенация строк |
335 |
Конкатенация других типов данных |
336 |
Преобразование строк и метод toString() |
337 |
Извлечение символов |
338 |
Метод charAt() |
338 |
Метод getChars() |
339 |
Метод getBytes() |
339 |
Метод toCharArray() |
340 |
Сравнение строк |
340 |
Методы equals() и equalsIgnoreCase() |
340 |
Метод region Matches() |
341 |
Методы startsWith() и endsWith() |
341 |
Сравнение equals() и операции = = |
343 |
Метод compareTo() |
343 |
Поиск строк |
344 |
Изменение строки |
346 |
Метод substring() |
346 |
Метод concat() |
347 |
Метод replace() |
348 |
Метод trim() |
348 |
Преобразование данных, использующее метод valueOf() |
349 |
Изменение регистра символов в строке |
350 |
Класс StringBitffer |
350 |
Конструкторы StringBuffer |
351 |
Методы length() и capacity() |
351 |
Метод ensureCapacity() |
352 |
Метод setLength() |
352 |
Методы charAt() и setCharAt() |
353 |
Метод getChars() |
353 |
Метод append() |
354 |
Метод insert() |
355 |
Метод reverse() |
355 |
Методы delete() и deleteCharAt() |
356 |
Метод replace() |
357 |
Метод substring() |
357 |
Глава 14. Пакет java.lang |
358 |
Оболочки простых типов |
359 |
Класс Number |
359 |
Оболочки Double и Float |
360 |
Оболочки Byte, Short, Integer и Long |
365 |
Оболочка Character |
374 |
Оболочка Boolean |
378 |
Класс Void |
378 |
Класс Process |
379 |
Класс Runtime |
379 |
Управление памятью |
381 |
Выполнение других программ |
382 |
Класс System |
384 |
Использование метода currentTimeMillis() |
386 |
Использование метода arraycopy() |
387 |
Свойства среды |
387 |
Класс Object |
388 |
Использование метода clone() и интерфейса Cloneable |
389 |
Класс Class |
391 |
Класс ClassLoader |
394 |
Класс Math |
395 |
Трансцендентные функции |
395 |
Экспоненциальные функции |
396 |
Округление функций |
397 |
Разные методы класса Math |
398 |
Компилятор |
399 |
Классы Thread, ThreadGroup и интерфейс Runnable |
399 |
Интерфейс Runnable |
399 |
Класс Thread |
399 |
Класс ThreadGroup |
402 |
Классы ThreadLocal и InheritableThreadLocal |
407 |
Класс Package |
408 |
Класс RunrimePermission |
409 |
Класс Trowable |
409 |
Класс SecurityManager |
410 |
Интерфейс Comparable |
410 |
Пакеты iava.lang.ref и java.lang.reflect |
410 |
Пакет java. lang.ref |
410 |
Пакет java.lang.reflect |
411 |
Глава 15. Пакет java.util: структура коллекций |
412 |
Краткий обзор коллекций |
413 |
Интерфейсы коллекций |
415 |
Интерфейс Collection |
416 |
Интерфейс List |
419 |
Интерфейс Set |
421 |
Интерфейс SortedSet |
421 |
Классы Collection |
422 |
Класс ArrayList |
423 |
Получение массива из ArrayList-объекта |
425 |
Класс LinkedList |
427 |
Класс HashSet |
428 |
Класс TreeSet |
430 |
Доступ к коллекции через итератор |
431 |
Использование итератора |
433 |
Коллекции пользовательских классов |
434 |
Работа с картами отображений |
436 |
Интерфейсы карт |
436 |
Классы карт отображений |
440 |
Компараторы |
444 |
Использование компаратора |
445 |
Алгоритмы коллекций |
448 |
Массивы |
452 |
Наследованные классы и интерфейсы |
456 |
Интерфейс Enumeration |
457 |
Класс Vector |
457 |
Класс Stack |
463 |
Класс Dictionary |
465 |
Класс Hashtable |
466 |
Класс Properties |
470 |
Использование методов store() и load() |
474 |
Резюме |
476 |
Глава 16. Пакет java.util: сервисные классы |
477 |
Класс StringTokenizer |
477 |
Класс BitSet |
479 |
Класс Date |
482 |
Сравнение дат |
484 |
Класс Calendar |
484 |
Класс GregorianCalendar |
488 |
Класс TimeZone |
490 |
Класс SimpleTimeZone |
491 |
Класс Locale |
492 |
Класс Random |
493 |
Класс Observable |
496 |
Интерфейс Observable |
497 |
Пример наблюдателя |
498 |
Пакет java.util.zip |
500 |
Пакет java.util.jar |
500 |
Глава 17. Ввод/вывод: обзор пакета java.io |
501 |
Классы и интерфейсы ввода/вывода Java |
501 |
Класс File |
503 |
Каталоги |
506 |
Использование интерфейса FilenameFilter |
507 |
Альтернативный метод listFiles() |
508 |
Создание каталогов |
509 |
Поточные классы |
509 |
Байтовые потоки |
509 |
Класс InputStream |
510 |
Класс OutputStream |
510 |
Класс FileInputStream |
511 |
Класс FileOutputStream |
513 |
Класс ByteArrayInputStream |
515 |
Класс ByteArrayOuputStream |
516 |
Фильтрованные байтовые потоки |
517 |
Буферизированные байтовые потоки |
518 |
Класс SequenceInputStream |
522 |
Класс PrintStream |
523 |
Класс RandomAccessFile |
524 |
Символьные потоки |
525 |
Класс Reader |
525 |
Класс Writer |
526 |
Класс FileReader |
527 |
Класс FileWriter |
528 |
Класс CharArrayReader |
529 |
Класс CharArrayWriter |
530 |
Класс BufferedReader |
531 |
Класс BufferedWriter |
533 |
Класс PushbackReader |
533 |
Класс PrintWriter |
534 |
Использование поточного ввода/вывода |
535 |
Улучшение метода wc с помощью класса StreamTokenizer |
537 |
Сериализация |
519 |
Интерфейс Serializable |
540 |
Интерфейс Externalizable |
540 |
Интерфейс Object Output |
540 |
Класс ObjeclOiirpulStream |
541 |
Интерфейс ObjectInput |
54? |
Класс ObjectInputStream |
541 |
Пример с сериализацией |
545 |
Преимущества потоков |
547 |
Глава 18. Работа в сети |
548 |
Основы работы в сети |
548 |
Обзор сокетов |
544 |
Клиент-сервер |
549 |
Зарезервированные сокеты |
550 |
Proxy-серверы |
551 |
Адресация Internet |
552 |
Java и сеть |
552 |
Сетевые классы и интерфейсы |
553 |
Класс InetAddress |
553 |