Язык_программирования_Java
.pdf1
Языык программирования Java
2
Языык программирования Java
Введение......................................................................................................................................... |
8 |
Что такое Java ............................................................................................................................ |
8 |
Структура книги........................................................................................................................ |
9 |
Выполнение Java-программы................................................................................................. |
10 |
Что такое JDK .......................................................................................................................... |
11 |
Что такое JRE........................................................................................................................... |
12 |
Как установить JDK ................................................................................................................ |
12 |
Как использовать JDK............................................................................................................. |
13 |
Интегрированные среды Java................................................................................................. |
13 |
Особая позиция Microsoft ....................................................................................................... |
14 |
Java в Internet............................................................................................................................ |
14 |
Литература по Java .................................................................................................................. |
15 |
ГЛАВА 1 Встроенные типы данных, операции над ними..................................................... |
16 |
Первая программа на Java ...................................................................................................... |
16 |
Комментарии............................................................................................................................ |
18 |
Константы ................................................................................................................................ |
19 |
Целые.................................................................................................................................... |
19 |
Действительные................................................................................................................... |
19 |
Символы............................................................................................................................... |
19 |
Строки................................................................................................................................... |
20 |
Имена........................................................................................................................................ |
20 |
Примитивные типы данных и операции............................................................................... |
21 |
Логический тип.................................................................................................................... |
22 |
Логические операции.......................................................................................................... |
22 |
Целые типы.......................................................................................................................... |
22 |
Операции над целыми типами............................................................................................... |
23 |
Арифметические операции................................................................................................. |
23 |
Приведение типов.................................................................................................................... |
24 |
Операции сравнения................................................................................................................ |
25 |
Побитовые операции............................................................................................................... |
26 |
Сдвиги................................................................................................................................... |
26 |
Вещественные типы................................................................................................................ |
27 |
Операции присваивания ......................................................................................................... |
27 |
Условная операция.................................................................................................................. |
28 |
Выражения............................................................................................................................... |
28 |
Приоритет операций ............................................................................................................... |
29 |
Операторы................................................................................................................................ |
29 |
Блок........................................................................................................................................... |
30 |
Операторы присваивания ....................................................................................................... |
30 |
Условный оператор................................................................................................................. |
30 |
Операторы цикла..................................................................................................................... |
31 |
Оператор continue и метки...................................................................................................... |
33 |
Оператор break......................................................................................................................... |
33 |
Оператор варианта .................................................................................................................. |
33 |
Массивы ................................................................................................................................... |
34 |
Многомерные массивы........................................................................................................... |
35 |
Заключение .............................................................................................................................. |
37 |
ГЛАВА 2 Объектно-ориентированное программирование в Java......................................... |
38 |
Парадигмы программирования.............................................................................................. |
38 |
Принципы объектно-ориентированного программирования.............................................. |
39 |
3 |
|
Абстракция........................................................................................................................... |
39 |
Иерархия .............................................................................................................................. |
41 |
Ответственность.................................................................................................................. |
41 |
Модульность........................................................................................................................ |
42 |
Принцип KISS...................................................................................................................... |
43 |
Как описать класс и подкласс................................................................................................ |
43 |
Абстрактные методы и классы .............................................................................................. |
46 |
Окончательные члены и классы ............................................................................................ |
47 |
Класс Object ............................................................................................................................. |
47 |
Конструкторы класса.............................................................................................................. |
48 |
Операция new........................................................................................................................... |
48 |
Статические члены класса...................................................................................................... |
48 |
Класс Complex ......................................................................................................................... |
50 |
Метод main() ............................................................................................................................ |
52 |
Где видны переменные........................................................................................................... |
53 |
Вложенные классы.................................................................................................................. |
54 |
Отношения "быть частью" и "являться" ............................................................................... |
57 |
Заключение.............................................................................................................................. |
57 |
ГЛАВА 3 Пакеты и интерфейсы............................................................................................... |
58 |
Пакет и подпакет..................................................................................................................... |
58 |
Права доступа к членам класса.............................................................................................. |
59 |
Размещение пакетов по файлам............................................................................................. |
61 |
Импорт классов и пакетов...................................................................................................... |
63 |
Java-файлы............................................................................................................................... |
63 |
Интерфейсы............................................................................................................................. |
63 |
Design patterns.......................................................................................................................... |
67 |
Заключение.............................................................................................................................. |
68 |
ГЛАВА 4 Классы-оболочки...................................................................................................... |
69 |
Числовые классы..................................................................................................................... |
69 |
Класс Boolean........................................................................................................................... |
71 |
Класс Character ........................................................................................................................ |
71 |
Класс Biglnteger ....................................................................................................................... |
73 |
Класс Big Decimal.................................................................................................................... |
75 |
Класс Class ............................................................................................................................... |
78 |
ГЛАВА 5 Работа со строками................................................................................................... |
81 |
Класс String .............................................................................................................................. |
81 |
Как создать строку.................................................................................................................. |
81 |
Сцепление строк...................................................................................................................... |
85 |
Манипуляции строками.......................................................................................................... |
85 |
Как узнать длину строки .................................................................................................... |
85 |
Как выбрать символы из строки........................................................................................ |
85 |
Как выбрать подстроку....................................................................................................... |
86 |
Как сравнить строки............................................................................................................ |
86 |
Как найти символ в строке................................................................................................. |
87 |
Как найти подстроку........................................................................................................... |
88 |
Как изменить регистр букв................................................................................................. |
88 |
Как заменить отдельный символ....................................................................................... |
88 |
Как убрать пробелы в начале и конце строки .................................................................. |
88 |
Как преобразовать данные другого типа в строку........................................................... |
88 |
Класс StringBuffer.................................................................................................................... |
89 |
Конструкторы...................................................................................................................... |
89 |
Как добавить подстроку ..................................................................................................... |
89 |
Как вставить подстроку...................................................................................................... |
89 |
Как удалить подстроку....................................................................................................... |
90 |
|
4 |
Как удалить символ............................................................................................................. |
90 |
Как заменить подстроку...................................................................................................... |
90 |
Как перевернуть строку...................................................................................................... |
90 |
Синтаксический разбор строки.......................................................................................... |
90 |
Класс StringTokenizer .............................................................................................................. |
90 |
Заключение .............................................................................................................................. |
91 |
ГЛАВА 6 Классы-коллекции..................................................................................................... |
92 |
Класс Vector ............................................................................................................................. |
92 |
Как создать вектор............................................................................................................... |
92 |
Как добавить элемент в вектор.......................................................................................... |
92 |
Как заменить элемент ......................................................................................................... |
92 |
Как узнать размер вектора.................................................................................................. |
92 |
Как обратиться к элементу вектора................................................................................... |
92 |
Как узнать, есть ли элемент в векторе............................................................................... |
93 |
Как узнать индекс элемента............................................................................................... |
93 |
Как удалить элементы......................................................................................................... |
93 |
Класс Stack ............................................................................................................................... |
94 |
Класс Hashtable ........................................................................................................................ |
94 |
Как создать таблицу............................................................................................................ |
94 |
Как заполнить таблицу ....................................................................................................... |
95 |
Как получить значение по ключу ...................................................................................... |
95 |
Как узнать наличие ключа или значения.......................................................................... |
95 |
Как получить все элементы таблицы ................................................................................ |
95 |
Как удалить элементы......................................................................................................... |
95 |
Класс Properties.................................................................................................................... |
96 |
Интерфейс Collection............................................................................................................... |
98 |
Интерфейс List ......................................................................................................................... |
98 |
Интерфейс Set .......................................................................................................................... |
98 |
Интерфейс SortedSet................................................................................................................ |
99 |
Интерфейс Map........................................................................................................................ |
99 |
Вложенный интерфейс Map.Entry ......................................................................................... |
99 |
Интерфейс SortedMap ............................................................................................................. |
99 |
Абстрактные классы-коллекции.......................................................................................... |
100 |
Интерфейс Iterator ................................................................................................................. |
100 |
Интерфейс Listlterator .......................................................................................................... |
101 |
Классы, создающие списки.................................................................................................. |
101 |
Двунаправленный список..................................................................................................... |
102 |
Классы, создающие отображения........................................................................................ |
102 |
Упорядоченные отображения .............................................................................................. |
102 |
Сравнение элементов коллекций......................................................................................... |
102 |
Классы, создающие множества............................................................................................ |
103 |
Упорядоченные множества.................................................................................................. |
103 |
Действия с коллекциями....................................................................................................... |
104 |
Методы класса Collections .................................................................................................... |
104 |
Заключение ............................................................................................................................ |
104 |
ГЛАВА 7 Классы-утилиты...................................................................................................... |
105 |
Работа с массивами ............................................................................................................... |
105 |
Локальные установки............................................................................................................ |
106 |
Работа с датами и временем................................................................................................. |
106 |
Часовой пояс и летнее время................................................................................................ |
107 |
Класс Calendar........................................................................................................................ |
107 |
Подкласс GregorianCalendar ................................................................................................. |
107 |
Представление даты и времени............................................................................................ |
108 |
Получение случайных чисел................................................................................................ |
108 |
5 |
|
Копирование массивов ......................................................................................................... |
109 |
Взаимодействие с системой................................................................................................. |
109 |
ГЛАВА 8 Принципы построения графического интерфейса .............................................. |
110 |
Компонент и контейнер........................................................................................................ |
111 |
Иерархия классов AWT ........................................................................................................ |
113 |
Заключение............................................................................................................................ |
114 |
ГЛАВА 9 Графические примитивы........................................................................................ |
115 |
Методы класса Graphics........................................................................................................ |
115 |
Как задать цвет.................................................................................................................. |
115 |
Как нарисовать чертеж..................................................................................................... |
116 |
Класс Polygon..................................................................................................................... |
116 |
Как вывести текст.............................................................................................................. |
117 |
Как установить шрифт...................................................................................................... |
117 |
Как задать шрифт.............................................................................................................. |
117 |
Класс FontMetrics .................................................................................................................. |
121 |
Возможности Java 2D............................................................................................................ |
123 |
Преобразование координат.................................................................................................. |
124 |
Класс AffineTransform........................................................................................................... |
124 |
Рисование фигур средствами Java2D .................................................................................. |
126 |
Класс BasicStroke............................................................................................................... |
126 |
Класс GeneralPath .................................................................................................................. |
129 |
Классы GradientPaint и TexturePaint .................................................................................... |
129 |
Вывод текста средствами Java 2D ....................................................................................... |
130 |
Методы улучшения визуализации....................................................................................... |
134 |
Заключение............................................................................................................................ |
135 |
ГЛАВА 10 Основные компоненты......................................................................................... |
136 |
Класс Component ................................................................................................................... |
136 |
Класс Cursor ........................................................................................................................... |
137 |
Как создать свой курсор................................................................................................... |
137 |
События.............................................................................................................................. |
138 |
Класс Container ...................................................................................................................... |
138 |
События.............................................................................................................................. |
138 |
Компонент Label.................................................................................................................... |
139 |
События.............................................................................................................................. |
139 |
Компонент Button.................................................................................................................. |
139 |
События.............................................................................................................................. |
139 |
Компонент Checkbox............................................................................................................. |
139 |
События.............................................................................................................................. |
139 |
Класс CheckboxGroup ........................................................................................................... |
140 |
Как создать группу радиокнопок..................................................................................... |
140 |
Компонент Choice ................................................................................................................. |
141 |
События.............................................................................................................................. |
141 |
Компонент List....................................................................................................................... |
141 |
События.............................................................................................................................. |
142 |
Компоненты для ввода текста.............................................................................................. |
143 |
Класс TextComponent............................................................................................................ |
143 |
События.............................................................................................................................. |
143 |
Компонент TextField ............................................................................................................. |
143 |
События.............................................................................................................................. |
144 |
Компонент TextArea.............................................................................................................. |
144 |
События.............................................................................................................................. |
144 |
Компонент Scrollbar .............................................................................................................. |
145 |
События.............................................................................................................................. |
146 |
Контейнер Panel..................................................................................................................... |
147 |
|
6 |
Контейнер ScrollPane ............................................................................................................ |
148 |
Контейнер Window................................................................................................................ |
148 |
События.............................................................................................................................. |
149 |
Контейнер Framе ................................................................................................................... |
149 |
События.............................................................................................................................. |
149 |
Контейнер Dialog................................................................................................................... |
150 |
События.............................................................................................................................. |
151 |
Контейнер FileDialog............................................................................................................. |
152 |
События.............................................................................................................................. |
152 |
Создание собственных компонентов................................................................................... |
152 |
Компонент Canvas ................................................................................................................. |
153 |
Создание "легкого" компонента .......................................................................................... |
154 |
ГЛАВА 11 Размещение компонентов .................................................................................... |
157 |
Менеджер FlowLayout........................................................................................................... |
157 |
Менеджер BorderLayout........................................................................................................ |
158 |
Менеджер GridLayout............................................................................................................ |
160 |
Менеджер Card Lay out ......................................................................................................... |
161 |
Менеджер GridBagLayout ..................................................................................................... |
162 |
Заключение ............................................................................................................................ |
164 |
ГЛАВА 12 Обработка событий............................................................................................... |
165 |
Событие ActionEvent............................................................................................................. |
169 |
Обработка действий мыши............................................................................................... |
169 |
Классы-адаптеры................................................................................................................... |
172 |
Обработка действий клавиатуры..................................................................................... |
172 |
Событие TextEvent ................................................................................................................ |
173 |
Обработка действий с окном............................................................................................ |
173 |
Событие ComponentEvent ..................................................................................................... |
174 |
Событие ContainerEvent........................................................................................................ |
174 |
Событие FocusEvent .............................................................................................................. |
174 |
Событие ItemEvent ................................................................................................................ |
174 |
Событие AdjustmentEvent ..................................................................................................... |
175 |
Несколько слушателей одного источника.......................................................................... |
176 |
Диспетчеризация событий.................................................................................................... |
177 |
Создание собственного события.......................................................................................... |
178 |
ГЛАВА 13 Создание меню...................................................................................................... |
179 |
Всплывающее меню.............................................................................................................. |
182 |
ГЛАВА 14 Апплеты................................................................................................................. |
185 |
Передача параметров ............................................................................................................ |
189 |
Параметры тега <applet>....................................................................................................... |
191 |
Сведения об окружении апплета ......................................................................................... |
192 |
Изображение и звук............................................................................................................... |
192 |
Слежение за процессом загрузки......................................................................................... |
192 |
Класс MediaTracker ............................................................................................................... |
193 |
Защита от апплета ................................................................................................................. |
194 |
Заключение ............................................................................................................................ |
195 |
ГЛАВА 15 Изображения и звук.............................................................................................. |
196 |
Модель обработки "поставщик-потребитель".................................................................... |
196 |
Классы-фильтры.................................................................................................................... |
198 |
Как выделить фрагмент изображения............................................................................. |
199 |
Как изменить цвет изображения...................................................................................... |
200 |
Как переставить пикселы изображения .......................................................................... |
201 |
Модель обработки прямым доступом................................................................................. |
202 |
Преобразование изображения в Java 2D ............................................................................. |
204 |
Аффинное преобразование изображения............................................................................ |
204 |
7 |
|
Изменение интенсивности изображения ............................................................................ |
206 |
Изменение составляющих цвета.......................................................................................... |
207 |
Создание различных эффектов............................................................................................ |
208 |
Анимация........................................................................................................................... |
209 |
Улучшение изображения двойной буферизацией ......................................................... |
210 |
Звук..................................................................................................................................... |
213 |
Проигрывание звука в Java 2............................................................................................ |
214 |
Синтез и запись звука в Java 2 ......................................................................................... |
217 |
ГЛАВА 16 Обработка исключительных ситуаций............................................................... |
220 |
Блоки перехвата исключения............................................................................................... |
221 |
Часть заголовка метода throws............................................................................................. |
223 |
Оператор throw ...................................................................................................................... |
224 |
Иерархия классов-исключений............................................................................................ |
225 |
Порядок обработки исключений ......................................................................................... |
226 |
Создание собственных исключений.................................................................................... |
226 |
Заключение............................................................................................................................ |
228 |
ГЛАВА 17 Подпроцессы......................................................................................................... |
229 |
Класс Thread........................................................................................................................... |
230 |
Синхронизация подпроцессов ............................................................................................. |
233 |
Согласование работы нескольких подпроцессов............................................................... |
235 |
Приоритеты подпроцессов................................................................................................... |
238 |
Подпроцессы-демоны........................................................................................................... |
239 |
Группы подпроцессов........................................................................................................... |
239 |
Заключение............................................................................................................................ |
239 |
ГЛАВА 18 Потоки ввода/вывода............................................................................................ |
240 |
Консольный ввод/вывод....................................................................................................... |
243 |
Файловый ввод/вывод........................................................................................................... |
245 |
Получение свойств файла..................................................................................................... |
246 |
Буферизованный ввод/вывод............................................................................................... |
247 |
Поток простых типов Java.................................................................................................... |
248 |
Кодировка UTF-8................................................................................................................... |
248 |
Прямой доступ к файлу........................................................................................................ |
250 |
Каналы обмена информацией.............................................................................................. |
250 |
Сериализация объектов ........................................................................................................ |
252 |
Печать в Java.......................................................................................................................... |
254 |
Печать средствами Java 2D .................................................................................................. |
256 |
Печать файла.......................................................................................................................... |
258 |
Печать страниц с разными параметрами............................................................................ |
259 |
ГЛАВА 19 Сетевые средства Java .......................................................................................... |
261 |
Работа в WWW ...................................................................................................................... |
262 |
Работа по протоколу TCP ..................................................................................................... |
265 |
Работа по протоколу UDP .................................................................................................... |
268 |
ПРИЛОЖЕНИЕ Развитие Java................................................................................................ |
270 |
Переход к Swing .................................................................................................................... |
270 |
Архиватор jar ......................................................................................................................... |
270 |
Создание архива.................................................................................................................... |
271 |
Файл описания MANIFEST.MF ........................................................................................... |
273 |
Файл INDEX.LIST................................................................................................................. |
273 |
Компоненты JavaBeans ......................................................................................................... |
274 |
Связь с базами данных через JDBC..................................................................................... |
275 |
Сервлеты................................................................................................................................ |
278 |
Java на сервере....................................................................................................................... |
280 |
Заключение................................................................................................................................ |
282 |
8
Введение
Книга, которую вы держите в руках, возникла из курса лекций, читаемых автором в течение последних лет для студентов младших курсов. Подобные книги рождаются после того, как студенты в сотый раз зададут один и тот же вопрос, который лектор уже несколько раз разъяснял в разных вариациях. Возникает желание отослать их к какой-нибудь литературе. Пересмотрев еще раз несколько десятков книг, использованных при подготовке лекций, порывшись в библиотеке и на прилавках книжных магазинов, лектор с удивлением обнаруживает, что не может предложить студентам ничего подходящего. Остается сесть за стол и написать книгу самому. Такое происхождение книги накладывает на нее определенные особенности. Она
•представляет собой сгусток практического опыта, накопленного автором и его студентами с
1996 г.;
•содержит ответы на часто задаваемые вопросы, последние "компьютерщики" называют FAQ (Frequency Asked Questions);
•написана кратко и сжато, как конспект лекций, в ней нет лишних слов (за исключением, может быть, тех, что вы только что прочитали);
•рассчитана на читателей, стремящихся быстро и всерьез ознакомиться с новинками компьютерных технологий;
•содержит много примеров применения конструкций Java, которые можно использовать как фрагменты больших производственных разработок в качестве "How to?";
•включает материал, являющийся обязательной частью подготовки специалиста по информационным технологиям;
•не предполагает знание какого-либо языка программирования, а для знатоков выделяются особенности языка Java среди других языков;
•предлагает обсуждение вопросов русификации Java.
Прочитав эту книгу, вы вступите в ряды программистов на Java — разработчиков технологии начала
XXI века.
Если спустя несколько месяцев эта книга будет валяться на вашем столе с растрепанными страницами, залитыми кофе и засыпанными пеплом, с массой закладок и загнутых углов, а вы начнете сетовать на то, что книга недостаточно полна и слишком проста, и ее содержание тривиально и широко известно, тогда автор будет считать, что его скромный труд не пропал даром.
Ну что же, начнем!
Что такое Java
Это остров Ява в Малайском архипелаге, территория Индонезии. Это сорт кофе, который любят пить создатели Java (произносится "Джава", с ударением на первом слоге). А если серьезно, то ответить на этот вопрос трудно, потому что границы Java, и без того размытые, все время расширяются. Сначала Java (официальный день рождения технологии Java — 23 мая 1995 г.) предназначалась для программирования бытовых электронных устройств, таких как телефоны. Потом Java стала применяться для программирования браузеров — появились апплеты. Затем оказалось, что на Java можно создавать полноценные приложения. Их графические элементы стали оформлять в виде компонентов — появились JavaBeans, с которыми Java вошла в мир распределенных систем и промежуточного программного обеспечения, тесно связавшись с технологией CORBA. Остался один шаг до программирования серверов — этот шаг был сделан — появились сервлеты и EJB (Enterprise JavaBeans). Серверы должны взаимодействовать с базами данных — появились драйверы JDBC (Java DataBase Connection). Взаимодействие оказалось удачным, и многие системы управления базами данных и даже операционные системы включили, Java в свое ядро, например Oracle, Linux, MacOS X, AIX. Что еще не охвачено? Назовите, и через полгода услышите, что Java уже вовсю применяется и там. Из-за этой размытости самого понятия его описывают таким же размытым словом — технология.
Такое быстрое и широкое распространение технологии Java не в последнюю очередь связано с тем, что она использует новый, специально созданный язык программирования, который так и называется — язык Java. Этот язык создан на базе языков Smalltalk, Pascal, C++ и др., вобрав их лучшие, по мнению создателей, черты и отбросив худшие. На этот счет есть разные мнения, но бесспорно, что язык получился удобным для изучения, написанные на нем программы легко читаются и отлаживаются: первую программу можно написать уже через час после начала изучения языка. Язык Java становится языком обучения объектно-ориентированному программированию, так же, как язык Pascal был языком обучения структурному программированию. Недаром на Java уже написано огромное количество программ, библиотек классов, а собственный апплет не написал только уж совсем ленивый.
9
Для полноты картины следует сказать, что создавать приложения для технологии Java можно не только на языке Java, уже появились и другие языки, есть даже компиляторы с языков Pascal и C++, но лучше все-таки использовать язык Java; на нем все аспекты технологии излагаются проще и удобнее. По скромному мнению автора, язык Java будет использоваться для описания различных приемов объектноориентированного программирования так же, как для реализации алгоритмов применялся вначале язык
Algol, а затем язык Pascal.
Ясно, что всю технологию Java нельзя изложить в одной книге, полное описание ее возможностей составит целую библиотеку. Эта книга посвящена только языку Java. Прочитав ее, вы сможете создавать Java-приложения любой сложности, свободно разбираться в литературе и листингах программ, продолжать изучение аспектов технологии Java по специальной литературе. Язык Java тоже очень бурно развивается, некоторые его методы объявляются устаревшими (deprecated), появляются новые конструкции, увеличивается встроенная библиотека классов, но есть устоявшееся .ядро языка, сохраняется его дух и стиль. Вот это-то устоявшееся и излагается в книге.
Структура книги
Книга состоит из четырех частей и приложения.
Первая часть содержит три главы, в которых рассматриваются базовые понятия языка. По прочтении ее вы сможете свободно разбираться в понятиях объектно-ориентированного программирования и их реализации на языке Java, создавать свои объектно-ориентированные программы, рассчитанные на консольный ввод/вывод.
В главе I описываются типы исходных данных, операции с ними, выражения, массивы, операторы управления потоком информации, приводятся ^примеры записи часто встречающихся алгоритмов на Java. После знакомства с этой главой вы сможете писать программы на Java, реализующие любые вычислительные алгоритмы, встречающиеся в вашей практике. В главе 2 вводятся основные понятия объектно-ориентированного программирования: объект и метод, абстракция, инкапсуляция, наследование, полиморфизм, контракты методов и их поручения друг другу. Эта глава призвана привить вам "объектный" взгляд на реализацию сложных проектов, после ее прочтения вы научитесь описывать проект как совокупность взаимодействующих объектов. Здесь же предлагается реализация всех этих понятий на языке Java. Тут вы, наконец, поймете, что же такое эти объекты и как, они взаимодействуют друг с другом,;
К главе 3 определяются пакеты классов и интерфейсы, ограничения доступа к классам и методам, на примерах подробно разбираются правила их использования. Объясняется структура встроенной библиотеки классов Java API.
Во второй части рассматриваются пакеты основных классов, составляющих неотъемлемую часть Java, разбираются приемы работы с ними и приводится примеры практического использования основных классов. Здесь вы увидите, как идеи объектно-ориентированного программирования реализуются на практике в сложных производственных библиотеках классов. После изучения этой части вы сможете реализовывать наиболее часто встречающиеся ситуации объектно-ориентированного программирования с помощью стандартных классов.
Глава 4 прослеживает иерархию стандартных классов и интерфейсов Java, на этом примере показано, как в профессиональных системах программирования реализуются концепции абстракции, инкапсуляции и наследования.
Вглаве 5 подробно излагаются приемы работы со строками символов, которые, как и все в Java, являются объектами, приводятся примеры синтаксического анализа текстов.
Вглаве 6 показано, как в языке Java реализованы контейнеры, позволяющие работать с совокупностями объектов и создавать сложные структуры данных.
Глава 7 описывает различные классы-утилиты, полезные во многих ситуациях при работе с датами, случайными числами, словарями и другими необходимыми элементами программ.
В третьей части объясняется создание графического интерфейса пользователя (ГИП) с помощью стандартной библиотеки классов AWT (Abstract Window Toolkit) и даны многочисленные примеры построения интерфейса. Подробно разбирается принятый в Java метод обработки событий, основанный на идее делегирования. Здесь же появляются апплеты как программы Java, работающие в окне браузера. Подробно обсуждается система безопасности выполнения апплетов. После прочтения третьей части вы сможете создавать полноценные приложения под графические платформы MS Windows, X Window System и др., а также программировать браузеры.
Глава 8 описывает иерархию классов библиотеки AWT, которую необходимо четко себе представлять для создания удобного интерфейса. Здесь же рассматривается библиотека графических классов Swing, постепенно становящаяся стандартной наряду с AWT.
В главе 9 демонстрируются приемы рисования с помощью графических примитивов, способы задания цвета и использование шрифтов, а также решается вопрос русификации приложений Java.
10
Вглаве 10 обсуждается понятие графической составляющей, рассматриваются готовые компоненты AWT и их применение, а также создание собственных компонентов.
Вглаве 11 показано, какие способы размещения компонентов в графическом контейнере имеются в AWT, и как их применять в разных ситуациях.
Вглаве 12 вводятся способы реагирования компонентов на сигналы от клавиатуры и мыши, а именно, модель делегирования, принятая в Java.
Вглаве 13 описывается создание системы меню — необходимой составляющей графического интерфейса.
Вглаве 14, наконец-то, появляются апплеты — Java-программы, предназначенные для выполнения
вокне браузера, и обсуждаются их особенности.
Вглаве 15 рассматривается работа с изображениями и звуком средствами AWT.
Вчетвертой части изучаются конструкции языка Java, не связанные общей темой. Некоторые из них необходимы для создания надежных программ, учитывающих все нештатные ситуации, другие позволяют реализовывать сложное взаимодействие объектов. Здесь же рассматривается передача потоков данных от одной программы Java к другой. Внимательное изучение четвертой части позволит вам дополнить свои разработки гибкими средствами управления выполнением приложения, создавать сложные клиент-серверные системы.
Глава 16 описывает средства обработки исключительных ситуаций, возникающих во время выполнения готовой программы, встроенные в Java.
Глава 17 рассказывает об уникальном свойстве языка Java — способности создавать подпроцессы (threads) и управлять их взаимодействием прямо из программы.
В главе 18 обсуждается концепция потока данных и ее реализация в Java для организации ввода/вывода на внешние устройства.
Глава 19, последняя по счету, но не по важности, рассматривает сетевые средства языка Java, позволяющие скрыть все сложности протоколов Internet и максимально рблегчить написание клиентсерверных приложений.
В приложении описываются дополнительные аспекты технологии Java: компоненты JavaBeans, сервлеты, драйверы соединения с базами данных JDBC, и прослеживаются пути дальнейшего развития технологии Java. Ознакомившись с этим приложением, вы сможете ориентироваться в информации о современном состоянии технологии Java и выбрать себе материал для дальнейшего изучения.
Выполнение Java-программы
Как вы знаете, программа, написанная на одном из языков высокого уровня, к которым относится и язык Java, так называемый исходный модуль ("исходник" или "сырец" на жаргоне, от английского "source"), не может быть сразу же выполнена. Ее сначала надо откомпилировать, т. е. перевести в последовательность машинных команд — объектный модуль. Но и он, как правило, не может быть сразу же выполнен: объектный модуль надо еще скомпоновать с библиотеками использованных в модуле функций и разрешить перекрестные ссылки между секциями объектного модуля, получив в результате загрузочный модуль — полностью готовую к выполнению программу.
Исходный модуль, написанный на Java, не может избежать этих процедур, но здесь проявляется главная особенность технологии Java — программа компилируется сразу в машинные команды, но не команды какого-то конкретного процессора, а в команды так называемой виртуальной машины Java (JVM, Java Virtual Machine). Виртуальная машина Java — это совокупность команд вместе с системой их выполнения. Для специалистов скажем, что виртуальная машина Java полностью стековая, так что не требуется сложная адресация ячеек памяти и большое количество регистров. Поэтому команды JVM короткие, большинство из них имеет длину 1 байт, отчего команды JVM называют байт^кодами (bytecodes), хотя имеются команды длиной 2 и 3 байта. Согласно статистическим исследованиям средняя длина команды составляет 1,8 байта. Полное описание команд и всей архитектуры JVM
содержится в спецификации виртуальной машины Java (VMS, Virtual Machine Specification). Если вы хотите в точности узнать, как работает виртуальная машина Java, ознакомьтесь с этой спецификацией.
Другая особенность Java — все стандартные функции, вызываемые в программе, подключаются к ней только на этапе выполнения, а не включаются в байт-коды. Как говорят специалисты, происходит динамическая компоновка (dynamic binding). Это тоже сильно уменьшает объем откомпилированной программы.
Итак, на первом этапе программа, написанная на языке Java, переводится компилятором в байткоды. Эта компиляция не зависит от типа какого-либо конкретного процессора и архитектуры некоего конкретного компьютера. Она может быть выполнена один раз сразу же после написания программы. Байт-коды записываются в одном или нескольких файлах, могут храниться во внешней памяти или передаваться по сети. Это особенно удобно благодаря небольшому размеру файлов с байт-кодами. Затем полученные в результате компиляции байт-коды можно выполнять на любом компьютере, имеющем систему, реализующую JVM. При этом не важен ни тип процессора, ни архитектура