Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Язык_программирования_Java

.pdf
Скачиваний:
85
Добавлен:
02.02.2015
Размер:
4.1 Mб
Скачать

1

Языык программирования 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. При этом не важен ни тип процессора, ни архитектура