Работа с графикой............................................................................................................................................................... 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
1.1. Java и другие языки программирования. Системное и прикладное программирование
Язык программирования Java был создан в рамках проекта корпорации Sun Microsystems по созданию компьютерных программно-аппаратных комплексов нового поколения. Первая версия языка была официально опубликована в 1995 году. С тех пор язык Java стал стандартом де-факто, вытеснив за десять лет языки C и C++ из многих областей программирования. В 1995 году они были абсолютными лидерами, но к 2006 году число программистов, использующих Java, стало заметно превышать число программистов, использующих C и C++, и составляет более четырёх с половиной миллионов человек. А число устройств, в которых используется Java, превышает полтора миллиарда.
Как связаны между собой языки C, C++, JavaScript и Java? Что между ними общего, и в чём они отличаются? В каких случаях следует, а в каких не следует их применять? Для того чтобы ответить на этот вопрос, следует сначала остановиться на особенностях программного обеспечения предыдущих поколений и о современных тенденциях в развитии программного обеспечения.