Глава 1. Общие представления о языке Java
Содержание
Введение.......................................................................................................................................................................................... 6
Глава 1. Общие представления о языке Java........................................................................................................................ 7
1.1. Java и другие языки программирования. Системное и прикладное программирование............................ 7
1.2. Виртуальная Java-машина, байт-код, JIT-компиляция. Категории программ, написанных на языке Java 11
1.3.Алфавит языка Java. Десятичные и шестнадцатеричные цифры и целые числа. Зарезервированные слова 16
Алфавит языка Java......................................................................................................................................................... 16
Десятичные и шестнадцатеричные цифры и целые числа................................................................................... 16
Зарезервированные слова языка Java........................................................................................................................ 18
1.4. Управляющие последовательности. Символы Unicode. Специальные символы........................................ 18
Управляющие последовательности............................................................................................................................ 18
Простые специальные символы................................................................................................................................... 19
Составные специальные символы............................................................................................................................... 20
1.5.Идентификаторы. Переменные и типы. Примитивные и ссылочные типы..................................................... 21
Краткие итоги по главе 1..................................................................................................................................................... 24
Задания..................................................................................................................................................................................... 25
Глава 2. Объектно-ориентированное проектирование и платформа NetBeans....................................................... 26
2.1.Процедурное и объектно-ориентированное программирование. Инкапсуляция........................................ 26
2.2. Работа со ссылочными переменными. Сборка мусора...................................................................................... 29
2.3. Проекты NetBeans. Пакеты. Уровни видимости классов. Импорт классов................................................... 33
2.4. Базовые пакеты и классы Java................................................................................................................................... 35
2.5. Создание в NetBeans простейшего приложения Java......................................................................................... 38
2.6. Компиляция файлов проекта и запуск приложения............................................................................................. 42
2.7. Структура проекта NetBeans..................................................................................................................................... 43
2.8. Создание в NetBeans приложения Java с графическим интерфейсом............................................................ 46
2.9. Редактор экранных форм............................................................................................................................................. 49
2.10. Внешний вид приложения......................................................................................................................................... 53
2.11. Ведение проектов........................................................................................................................................................ 54
2.11. Редактирование меню экранной формы............................................................................................................... 56
2.12. Создание нового класса............................................................................................................................................ 58
2.13. Документирование исходного кода в Java.......................................................................................................... 61
2.14. Основные компоненты пакетов swing и awt......................................................................................................... 65
2.15. Технологии Java и .Net............................................................................................................................................... 70
Краткие итоги по главе 2..................................................................................................................................................... 72
Задания..................................................................................................................................................................................... 73
Глава 3. Примитивные типы данных и операторы для работы с ними...................................................................... 74
3.1.Булевский (логический) тип......................................................................................................................................... 74
3.2.Целые типы, переменные, константы........................................................................................................................ 75
3.3.Основные операторы для работы с целочисленными величинами................................................................. 77
3.4.Вещественные типы и класс Math............................................................................................................................. 78
3.5.Правила явного и автоматического преобразования типа при работе с числовыми величинами......... 81
3.6. Оболочечные классы. Упаковка (boxing) и распаковка (unboxing)................................................................. 83
3.7.Приоритет операторов.................................................................................................................................................. 84
3.8.Типы-перечисления (enum).......................................................................................................................................... 85
Краткие итоги по главе 3..................................................................................................................................................... 88
Задания..................................................................................................................................................................................... 89
Глава 4. Работа с числами в языке Java............................................................................................................................... 91
4.1 Двоичное представление целых чисел..................................................................................................................... 91
Позиционные и непозиционные системы счисления.............................................................................................. 91
Двоичное представление положительных целых чисел....................................................................................... 92
Двоичное представление отрицательных целых чисел. Дополнительный код............................................. 93
Проблемы целочисленной машинной арифметики................................................................................................ 94
Шестнадцатеричное представление целых чисел и перевод из одной системы счисления в другую.... 95
4.2. Побитовые маски и сдвиги.......................................................................................................................................... 97
4.3. Двоичное представление вещественных чисел.................................................................................................. 100
Двоичные дроби............................................................................................................................................................. 100
Мантисса и порядок числа......................................................................................................................................... 100
Стандарт IEEE 754 представления чисел в формате с плавающей точкой*............................................... 102
Краткие итоги по главе 4.................................................................................................................................................. 106
Задания.................................................................................................................................................................................. 106
Глава 5. Управляющие конструкции.................................................................................................................................. 108
Составной оператор..................................................................................................................................................... 108
Условный оператор if................................................................................................................................................ 108
Оператор выбора switch.............................................................................................................................................. 112
Условное выражение …?... : ….................................................................................................................................. 112
Операторы инкремента ++ и декремента --............................................................................................................ 113
Оператор цикла for..................................................................................................................................................... 113
Оператор цикла while – цикл с предусловием.................................................................................................. 117
Оператор цикла do...while – цикл с постусловием...................................................................................... 118
Операторы прерывания continue, break, return, System.exit............................................................................... 119
Краткие итоги по главе 5.................................................................................................................................................. 122
Задания.................................................................................................................................................................................. 122
Глава 6. Начальные сведения об объектном программировании.............................................................................. 123
Наследование и полиморфизм. UML-диаграммы...................................................................................................... 123
Функции. Модификаторы. Передача примитивных типов в функции................................................................. 129
Локальные и глобальные переменные. Модификаторы доступа и правила видимости. Ссылка this........ 132
Передача ссылочных типов в функции. Проблема изменения ссылки внутри подпрограммы.................... 134
Наследование. Суперклассы и подклассы. Переопределение методов.............................................................. 139
Наследование и правила видимости. Зарезервированное слово super............................................................... 144
Статическое и динамическое связывание методов. Полиморфизм....................................................................... 146
Базовый класс Object......................................................................................................................................................... 147
Конструкторы. Зарезервированные слова super и this. Блоки инициализации................................................. 149
Удаление неиспользуемых объектов и метод finalize. Проблема деструкторов для сложно устроенных объектов 152
Перегрузка методов............................................................................................................................................................ 152
Правила совместимости ссылочных типов как основа использования полиморфного кода. Приведение и проверка типов.................................................................................................................................................................................................. 155
Рефакторинг.......................................................................................................................................................................... 157
Reverse engineering – построение UML-диаграмм по разработанным классам................................................ 160
Краткие итоги по главе 6.................................................................................................................................................. 166
Задания.................................................................................................................................................................................. 167
Глава 7. Важнейшие объектные типы................................................................................................................................ 169
Массивы................................................................................................................................................................................. 169
Коллекции, списки, итераторы........................................................................................................................................ 173
Работа со строками в Java. Строки как объекты. Классы String, StringBuffer и StringBuilder....................... 176
Работа с графикой............................................................................................................................................................... 180
Исключительные ситуации.............................................................................................................................................. 183
Обработка исключительных ситуаций................................................................................................................... 183
Иерархия исключительных ситуаций...................................................................................................................... 185
Объявление типа исключительной ситуации и оператор throw....................................................................... 186
Объявление метода, который может возбуждать исключительную ситуацию. Зарезервированное слово throws 187
Работа с файлами и папками........................................................................................................................................... 188
Работа с файлами и папками с помощью объектов типа File............................................................................ 188
Выбор файлов и папок с помощью файлового диалога..................................................................................... 192
Работа с потоками ввода-вывода.............................................................................................................................. 195
Краткие итоги по главе 7.................................................................................................................................................. 202
Задания.................................................................................................................................................................................. 203
Глава 8. Наследование: проблемы и альтернативы. Интерфейсы. Композиция................................................... 204
Проблемы множественного наследования классов. Интерфейсы......................................................................... 204
Отличия интерфейсов от классов. Проблемы наследования интерфейсов........................................................ 206
Пример на использование интерфейсов....................................................................................................................... 208
Композиция как альтернатива множественному наследованию.......................................................................... 210
Краткие итоги по главе 8.................................................................................................................................................. 212
Задания.................................................................................................................................................................................. 212
Глава 9. Дополнительные элементы объектного программирования на языке Java........................................... 214
Потоки выполнения (threads) и синхронизация.......................................................................................................... 214
Преимущества и проблемы при работе с потоками выполнения.................................................................... 214
Синхронизация по ресурсам и событиям............................................................................................................... 215
Класс Thread и интерфейс Runnable. Создание и запуск потока выполнения............................................ 217
Поля и методы, заданные в классе Thread.............................................................................................................. 219
Подключение внешних библиотек DLL.“Родные” (native) методы*.................................................................... 221
Краткие итоги по главе 9.................................................................................................................................................. 224
Задания.................................................................................................................................................................................. 225
Глава 10. Введение в сетевое программирование.......................................................................................................... 227
Краткая справка по языку HTML................................................................................................................................... 227
Апплеты................................................................................................................................................................................. 232
Сервлеты................................................................................................................................................................................ 234
Технология JSP – Java Server Pages................................................................................................................................ 237
Краткие итоги по главе 10................................................................................................................................................ 241
Задания.................................................................................................................................................................................. 242
Глава 11. Встроенные классы.............................................................................................................................................. 243
Виды встроенных классов................................................................................................................................................ 243
Вложенные (nested) классы и интерфейсы................................................................................................................... 243
Внутренние (inner) классы................................................................................................................................................ 244
Локальные (local) классы.................................................................................................................................................. 246
Анонимные (anonimous) классы и обработчики событий....................................................................................... 246
Анонимные (anonimous) классы и слушатели событий (listeners)......................................................................... 247
Краткие итоги по главе 11................................................................................................................................................ 250
Задания.................................................................................................................................................................................. 251
Глава 12. Компонентное программирование................................................................................................................... 252
Компонентная архитектура JavaBeans........................................................................................................................ 252
Мастер создания компонента в NetBeans.................................................................................................................... 253
Пример создания компонента в NetBeans – панель с заголовком......................................................................... 256
Добавление в компонент новых свойств...................................................................................................................... 259
Добавление в компонент новых событий..................................................................................................................... 261
Краткие итоги по главе 12................................................................................................................................................ 265
Задания.................................................................................................................................................................................. 266
Литература................................................................................................................................................................................. 267
Дополнительная литература........................................................................................................................................... 267
Введение
Языку Java посвящены сотни тысяч книг и учебных курсов. Поэтому, без сомнения, предлагаемый курс может рассматриваться только как краткое введение в данную область. Его назначение – дать основные представления о концепциях языка и современном состоянии дел. Java быстро развивается, из-за чего многие прежние представления оказываются устаревшими.
Данный курс основан на лекциях, читавшихся автором студентам кафедры вычислительной физики физического факультета СПбГУ, но был существенно переработан. Курс рассчитан на широкую аудиторию начинающих программистов, от школьников-старшеклассников до студентов старших курсов, а также людей, желающих самостоятельно научиться программировать на этом языке. Кроме того, курс может быть интересен даже опытным программистам, которые по каким-либо причинам не отслеживали изменения и нововведения в Java за последние годы. Курс содержит информацию об основных синтаксических конструкциях языка Java, особенностях и типичных ошибках их использования, а также сведения о современных средах разработки.
Одной из привлекательных особенностей языка Java с самого начала была бесплатность распространения базовых средств разработки (SDK – Software Development Kit) и исполняющей среды Java (виртуальной Java-машины). Однако компилятор, входящий в состав SDK, работал в режиме командной строки, то есть отставал идеологически по крайней мере на 20 лет от современных профессиональных компиляторов. В 2006 году корпорация Sun Microsystems пошла на беспрецедентный шаг – сделала бесплатными профессиональные средства разработки программного обеспечения.
Еще одним шагом Sun в направлении открытости программного обеспечения, в том числе - исходного кода, стала разработка платформы NetBeans. Это среда, основанная на принципах компонентного программирования. Она включает в себя как среду разработки, так и набор библиотечных компонентов ( Beans – “зёрна”. Игра слов: язык Java получил название по имени кофе, которое любили программисты, так что название компонентной модели Java Beans может быть расшифровано как “зёрна кофе Java”). Компонентная модель NetBeans – дальнейший шаг после Java Beans.
Среда разработки NetBeans может быть свободно загружено с сайта Sun и распространяется на условиях лицензии Sun Public License (SPL). Данная лицензия подразумевает, что всё программное обеспечение, написанное на условиях SPL, поставляется с открытым исходным кодом (source code). В настоящее время продукт Sun Java Studio Enterprise прекратил самостоятельное существование и стал расширением среды NetBeans – теперь это NetBeans Enterprise Pack.
Все примеры, приводящиеся в данной книге, разработаны и проверены в среде NetBeans версии 5.5 с JDK1.5.0_04.
Упоминаемые в данной книге названия
Java® и Solaris® - являются торговыми марками корпорации Sun Microsystems
Windows® - является торговой маркой корпорации Microsoft
MacOS®- является торговой маркой корпорации Apple
Глава 1. Общие представления о языке Java