|
|
|
Книги: [Классика] [Базы данных] [Internet/WWW] [Сети] [Программирование] [UNIX] [Windows] [Безопасность] [Графика] [Software Engineering] [ERP-системы] [Hardware]
Содержание
Предисловие
Предисловие ко второму изданию
Java 2
Введение
Предпосылки
Изучение Java
Цели
Интерактивная документация
Главы
Упражнения
Мультимедийный компакт-диск
Исходные тексты программ
Стандарты программирования
Версии Java
Семинары и преподавание
Ошибки
Благодарности
Помощники из Интернета
Глава 1. Введение в объекты
Развитие абстракции
У объекта существует интерфейс
Скрытая реализация
Многократное использование реализации
Наследование: многократное использование интерфейса
Сравнение связей "это-есть-то" и "это-схоже-с-тем"
Взаимозаменяемые объекты и полиморфизм
Абстрактные базовые классы и интерфейсы
Место существования и время жизни объектов
Коллекции и итераторы
Однокоренная иерархия
Библиотеки коллекций и поддержка их простого использования
Домашняя дилемма: кто убирает?
Обработка исключений: борьба с ошибками
Многозадачность
Постоянство
Java и Интернет
Что такое сеть WWW?
Клиентское программирование
Серверное программирование
Уединенная арена: приложения
Анализ и планирование
Этап 0: Создание плана
Этап 1: Что мы делаем?
Этап 2: Как мы будем это создавать?
Этап 3: Создание ядра
Этап 4: Перечисление случаев использования
Этап 5: Эволюция
Планы окупаются
Экстремальное программирование
Сначала пишем тест
Программирование парами
Почему Java имеет такой успех
Системы легче описывать и понимать
Самое быстрое средство достижения цели -- библиотеки
Обработка ошибок
Программирование в большом масштабе
Стратегии для переходного периода
Рекомендации
Возможные препятствия
Java или C++?
Резюме
Глава 2. Все является объектом
Вы манипулируете объектами с помощью ссылок
Вы должны явно создавать все объекты
Где находится хранилище
Особый случай: примитивные типы
Массивы в Java
Вам никогда не придется удалять объект
Область видимости
Область видимости объектов
Создание новых типов данных: класс
Поля и методы
Методы, параметры и возвращаемые значения
Список параметров
Создание программы на Java
Видимость имен
Использование дополнительных компонентов
Ключевое слово static
Ваша первая программа на Java
Компиляция и выполнение
Комментарии и встроенная документация
Документация в комментариях
Синтаксис
Внедренный HTML
@see: обращение к другим классам
Знаки документации классов
Знаки документации переменных
Знаки документации методов
Пример документации
Стиль программирования
Резюме
Упражнения
Глава 3. Управление ходом программы
Использование операторов Java
Приоритет
Присвоение
Математические операторы
Автоматическое приращение и уменьшение
Операторы сравнения
Логические операторы
Поразрядные операторы
Операторы сдвига
Тройной оператор "если-то"
Оператор-запятая
Строковый оператор "+"
Обычные ошибки при использовании операторов
Операторы приведения
В Java отсутствует "sizeof"
Таблица приоритета операторов
Полное собрание операторов
Управление выполнением программы
Значения true и false
if-else
Цикл
do-while
for
Ключевые слова break и continue
switch
Резюме
Упражнения
Глава 4. Инициализация и завершение
Конструктор гарантирует инициализацию
Перегрузка методов
Различение перегруженных методов
Перегрузка с примитивными типами
Перегрузка и возвращаемые значения
Конструкторы по умолчанию
Ключевое слово this
Завершение: удаление и сборка мусора
Для чего предназначен метод finalize()?
Вы должны проводить завершающие действия
Условие смерти
Как работает сборщик мусора
Инициализация членов класса
Указание явной инициализации
Инициализация конструктором
Инициализация массивов
Многомерные массивы
Резюме
Упражнения
Глава 5. Сокрытие реализации
Пакет: элемент библиотеки
Создание уникальных имен пакетов
Библиотека инструментов
Использование импорта для изменения поведения
Предостережение при работе с пакетами
Спецификаторы доступа Java
"Дружественный"
public: доступ к интерфейсу
private: этого трогать нельзя!
protected: что-то вроде "дружественного доступа"
Интерфейс и реализация
Доступ к классам
Резюме
Упражнения
Глава 6. Многократное использование классов
Синтаксис композиции
Синтаксис наследования
Инициализация базового класса
Сочетание композиции и наследования
Обеспечение правильного завершения
Сокрытие имен
Выбор между композицией и наследованием
protected
Пошаговая разработка
Восходящее преобразование типов
Почему "восходящее преобразование"?
Ключевое слово final
Неизменные данные
Неизменные методы
Неизменные классы
Предупреждение при работе с final
Инициализация и загрузка классов
Инициализация с наследованием
Резюме
Упражнения
Глава 7. Полиморфизм
Восходящее преобразование: пересмотр
Игнорирование типа объекта
Трюк
Связывание метод-вызов
Получение нужного результата
Расширяемость
Переопределение против перегрузки
Абстрактные классы и методы
Конструкторы и полиморфизм
Порядок вызова конструкторов
Наследование и метод finalize()
Действие полиморфных методов при вызове из конструкторов
Использование наследования
Чистое наследование в сравнении с расширением
Нисходящее преобразование и динамическое определение типов
Резюме
Упражнения
Глава 8. Интерфейсы и внутренние классы
Интерфейсы
"Множественное наследование" в Java
Расширение интерфейса с помощью наследования
Группировка констант
Инициализация полей интерфейсов
Внутренние классы
Внутренние классы и восходящее преобразование
Внутренние классы в методах и областях видимости
Безымянные внутренние классы
Связь с внешним классом
Статические внутренние классы
Обращение к объекту внешнего класса
Вложенные интерфейсы
Использование внешнего окружения из внутреннего
класса произвольного уровня вложенности
Наследование от внутренних классов
Можно ли переопределить внутренний класс?
Идентификаторы внутренних классов
Какой смысл во внутренних классах?
Внутренние классы и система управления
Резюме
Упражнения
Глава 9. Хранение ваших объектов
Массивы
Массивы -- это первоклассные объекты
Возвращение массива
Класс Arrays
Заполнение массива
Копирование массива
Сравнение массивов
Сравнения элементов массива
Сортировка массива
Поиск в отсортированном массиве
Массивы: резюме
Введение в контейнеры
Печать контейнеров
Заполнение контейнеров
Недостаток контейнеров: неизвестный тип
Иногда это все равно работает
Создание контейнера ArrayList для определенного типа
Итераторы
Классификация контейнеров
Функциональность коллекций Collection
Функциональность списков List
Создание стека на основе списка LinkedList
Создание очереди на основе списка LinkedList
Функциональность множества Set
Отсортированное множество SortedSet
Функциональность таблицы Map
Отсортированная таблица SortedMap
Хэширование и хэш-код
Переопределение метода hashCode()
Хранение ссылок
Таблица WeakHashMap
Итераторы: еще один взгляд
Выбор реализации
Выбор списка List
Выбор множества Set
Выбор таблицы Map
Сортировка и поиск в списках List
Инструменты
Получение неизменных коллекций и таблиц
Синхронизация коллекции или таблицы
Неподдерживаемые операции
Контейнеры языка Java версий 1.0/1.1
Vector и Enumeration
Hashtable
Stack
BitSet
Резюме
Упражнения
Глава 10. Обработка ошибок и исключения
Основные исключения
Параметры при создании исключения
Обработка исключения
Блок try
Обработчики исключений
Создание собственных исключений
Описание исключений
Перехват любого типа исключения
Повторное возбуждение исключения
Стандартные исключения Java
Особый случай -- RuntimeException
Осуществление завершающих действий с помощью предложения finally
Для чего нужно finally?
Ловушка: потерянное исключение
Ограничения исключений
Конструкторы
Соответствие исключений
Исключения: полезные советы и рекомендации
Резюме
Упражнения
Глава 11. Система ввода/вывода Java
Класс File
Список директорий
Создание директорий
Ввод и вывод
Разновидности входных потоков InputStream
Разновидности выходных потоков OutputStream
Добавление новых свойств и полезных интерфейсов
Чтение из входного потока InputStream с помощью
надстройки FilterInputStream
Запись в выходной поток OutputStream с помощью
надстройки FilterOutputStream
Классы для чтения и записи данных -- Reader и Writer
Источники и приемники данных
Изменение поведения потока
Классы, оставленные без изменений
Сам по себе: класс RandomAccessFile
Типичное использование потоков ввода/вывода
Входные потоки
Выходные потоки
Ошибка?
Каналы
Стандартный ввод/вывод
Чтение стандартного ввода
Надстройка PrintWriter для стандартного вывода
Перенаправление стандартного ввода/вывода
Сжатие данных
Простое сжатие алгоритмом GZIP
Сжатие файлов в формате Zip
Архивы Java ARchives (JARs)
Сериализация объектов
Нахождение класса
Управление процессом сериализации
Использование постоянства
Разбитие входных данных
StreamTokenizer
StringTokenizer
Проверка правильности написания имен
Резюме
Упражнения
Глава 12. Динамическое определение типов
Необходимость в динамическом определении типов (RTTI)
Объект Class
Проверка перед преобразованием
Синтаксис RTTI
Отражение: динамическая информация о классе
Информация о методах класса
Резюме
Упражнения
Глава 13. Создание окон и апплетов
Простой апплет
Ограничения апплетов
Преимущества апплетов
Каркасы приложения
Запуск апплетов в Web-броузере
Использование инструмента Appletviewer
Тестирование апплетов
Запуск апплетов из командной строки
Инструмент для показа программ на экране
Использование Проводника Windows
Делаем кнопку
Обработка события
Многострочные текстовые поля
Управление расположением компонентов
Полярное расположение BorderLayout
Последовательное расположение FlowLayout
Табличное расположение GridLayout
Расположение GridBagLayout
Абсолютное расположение
Блочное расположение BoxLayout
Лучший вариант?
Модель событий библиотеки Swing
Типы событий и слушателей
Обработка нескольких событий одновременно
Каталог компонентов библиотеки Swing
Кнопки
Значки
Подсказки
Текстовые поля
Рамки
Панель прокрутки JScrollPane
Мини-редактор
Флажки
Переключатели
Комбинированные (выпадающие) списки
Списки
Панель вкладок
Окна сообщений
Меню
Всплывающие меню
Рисование
Диалоговые окна
Окно списка файлов
Использование HTML для компонентов Swing
Ползунки и индикаторы выполнения
Деревья
Таблицы
Выбор внешнего вида и поведения программы
Буфер обмена
Упаковка апплета в файл формата JAR
Техника программирования
Динамическое связывание событий
Разделение вычислений и пользовательского интерфейса
Каноническая форма
Визуальное программирование и компоненты JavaBeans
Что такое компонент Bean?
Получение информации о компоненте Bean
с помощью инструмента Introspector
Более сложный компонент Bean
Упаковка компонента Bean
Поддержка более сложных компонентов Bean
Больше о компонентах Bean
Резюме
Упражнения
Глава 14. Многозадачность
Чуткие пользовательские интерфейсы
Наследование от потока Thread
Использование потоков для создания чуткого интерфейса
Совмещение потока с основным классом
Создание произвольного количества потоков
Потоки-демоны
Совместное использование ограниченных ресурсов
Неверный доступ к ресурсам
Как Java разделяет ресурсы
Компоненты JavaBeans: еще один взгляд
Блокировка
Переход в блокированное состояние
Тупик
Приоритеты
Чтение и установка приоритетов
Группы потоков
Еще раз об интерфейсе Runnable
Слишком много потоков
Резюме
Упражнения
Глава 15. Распределенное программирование
Сетевое программирование
Идентификация машины
Разъемы
Обслуживание произвольного количества клиентов
Дейтаграммы
Использование адресов URL из апплета
Больше о сети
Java и базы данных (интерфейс JDBC)
Как сделать пример работоспособным
Программа поиска с графическим пользовательским интерфейсом
Почему интерфейс JDBC кажется таким сложным
Более интересный пример
Сервлеты
Простой сервлет
Сервлеты и многозадачность
Обработка сеансов
Запуск примеров-сервлетов
Серверные страницы Java (JSP)
Встроенные объекты
Директивы страниц JSP
Элементы сценариев страниц JSP
Извлечение полей и значений
Параметры и области видимости страниц JSP
Страницы JSP и манипуляция сеансами
Создание и модификация файлов cookie
Серверные страницы JSP: резюме
Удаленный вызов методов (RMI)
Удаленные интерфейсы
Реализация удаленного интерфейса
Создание заглушек и каркасов
Использование удаленного объекта
CORBA
Основы CORBA
Пример
Апплеты Java и архитектура CORBA
CORBA в сравнении с RMI
Технология Enterprise JavaBeans
Сравнение компонентов JavaBeans и EJBs
Спецификация EJB
Компоненты EJB
Составные части компонента EJB
Действие EJB
Типы компонентов EJB
Разработка компонента EJB
Компоненты EJB: резюме
Jini: распределенные услуги
Jini в контексте
Что такое Jini?
Как работает Jini
Процесс обнаружения
Процесс соединения
Процесс поиска
Разделение интерфейса и реализации
Абстрагирование распределенных систем
Резюме
Упражнения
Приложение А. Передача и возвращение объектов
Передача ссылок
Совмещение имен
Создание локальных копий
Передача по значению
Клонирование объектов
Добавление к классу возможности клонирования
Успешное клонирование
Действие метода Object.clone()
Клонирование составного объекта
Глубокое копирование списка ArrayList
Глубокое копирование сериализацией
Добавление клонируемости далее по иерархии
Почему все сделано так странно?
Управление клонированием
Конструктор-копировщик
Классы "только для чтения"
Создание классов "только для чтения"
Недостаток неизменяемости
Неизменные строки String
Классы String и StringBuffer
Строки String необычны
Резюме
Упражнения
Приложение Б. Java Native Interface (JNI)
Вызов родного метода
Генератор заголовочных файлов: javah
Искажение имен и обозначения функций
Реализация библиотеки DLL
Доступ к функциям JNI: параметр JNIEnv
Доступ к строкам
Передача и использование объектов
Интерфейс JNI и исключения
Интерфейс JNI и многозадачность
Использование уже существующего кода
Дополнительная информация
Приложение В. Рекомендации по программированию на Java
Проектирование
Реализация
Приложение Г. Рекомендованная литература
Программные средства
Книги
Анализ и планирование
Язык Python
Список моих собственных книг
Алфавитный указатель
Начало
Предисловие
Введение
Структура книги
Компакт-диск
Заказать книгу в магазине "Мистраль"
|
|
|
|
|
|
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее... |
|