Книга, которую вы держите в руках, возникла из курса лекций, читаемых автором студентам младших курсов уже более десяти лет. Подобные книги рождаются после того, как студенты в очередной раз зададут вопрос, который лектор уже несколько раз разъяснял в разных вариациях. Возникает желание отослать их к... какой-нибудь литературе. Пересмотрев еще раз несколько десятков книг, использованных при подготовке лекций, порывшись в библиотеке и на прилавках книжных магазинов, лектор с удивлением обнаруживает, что не может предложить студентам ничего подходящего. Остается сесть за стол и написать книгу самому. Такое происхождение книги накладывает на нее определенные особенности. Она:
□ представляет собой сгусток практического опыта, накопленного автором и его студентами с 1996 г.;
□ содержит ответы на часто задаваемые вопросы, последних "компьютерщики" называют FAQ (Frequently Asked Questions);
□ написана кратко и сжато, как конспект лекций, в ней нет лишних слов (за исключением, может быть, тех, что вы только что прочитали);
□ рассчитана на читателей, стремящихся быстро и всерьез ознакомиться с новинками компьютерных технологий;
□ содержит много примеров применения конструкций Java, которые можно использовать как фрагменты больших производственных разработок в качестве "How to...?";
□ включает материал, являющийся обязательной частью подготовки специалиста по информационным технологиям;
□ не предполагает знание какого-либо языка программирования, а для знатоков — выделяет особенности языка Java среди других языков;
□ предлагает обсуждение вопросов русификации Java.
Прочитав эту книгу, вы вступите в ряды программистов на Java — разработчиков передовой технологии начала XXI века.
Если спустя несколько месяцев эта книга будет валяться на вашем столе с растрепанными страницами, залитыми кофе и засыпанными пеплом, с массой закладок и загнутых углов, а вы начнете сетовать на то, что книга недостаточно полна и слишком проста и ее содержание тривиально и широко известно, а примеры банальны, тогда автор будет считать, что его скромный труд не пропал даром.
Пошел второй десяток лет с того дня, когда были написаны эти строки. Все случилось так, как я и написал. Разошлись три издания книги "Самоучитель Java". Я видел много ее экземпляров в самом разном состоянии. Читатели высказали мне множество нелицеприятных соображений по поводу содержания книги, обнаруженных ошибок и опечаток. Студенты на зачетах и экзаменах пересказывали мне целые куски книги, что тоже наводило на размышления по поводу ее содержания и стиля изложения. У меня накопилось много дополнительного материала, который так и просился в книгу.
Технология Java развивается очень быстро. Сначала предназначавшаяся для небольших сетевых приложений, Java прочно утвердилась на Web-серверах, проникла в сотовые телефоны, планшеты и другие мобильные устройства. Популярная операционная система Android базируется на Java. Теперь Java — обязательная часть Web-программирования.
Развивается и сам язык. В него вводятся новые конструкции, появляются новые библиотеки классов. Графическая библиотека Swing стала частью стандартной поставки Java. В стандартную поставку теперь включены и средства работы с документами XML. Вышла уже седьмая версия Java.
Все это привело к необходимости сделать новое издание, дополнив книгу новым материалом и исправив, увы, неизбежные опечатки.
Ну что же, начнем!
Что такое Java?
Рто остров РЇРІР° РІ Малайском архипелаге, территория Рндонезии. Рто СЃРѕСЂС‚ кофе, который любят пить создатели Java (произносится "джава", СЃ ударением РЅР° первом слоге). Рђ если серьезно, то ответить РЅР° этот РІРѕРїСЂРѕСЃ трудно, потому что границы Java, Рё без того размытые, РІСЃРµ время расширяются.
Сначала Java (официальный день рождения технологии Java — 23 мая 1995 г.) предназначалась для программирования бытовых электронных устройств, таких как сотовые телефоны и другие мобильные устройства.
Потом Java стала применяться для программирования браузеров — появились апплеты.
Затем оказалось, что РЅР° Java можно создавать полноценные приложения. РС… графические элементы стали оформлять РІ РІРёРґРµ компонентов — появились JavaBeans, СЃ которыми Java вошла РІ РјРёСЂ распределенных систем Рё промежуточного программного обеспечения, тесно связавшись СЃ технологией CORBA.
Остался РѕРґРёРЅ шаг РґРѕ программирования серверов — этот шаг был сделан — появились сервлеты (servlets), страницы JSP (JavaServer Pages) Рё EJB (Enterprise JavaBeans). Серверы должны взаимодействовать СЃ базами данных — появились драйверы JDBC. Взаимодействие оказалось удачным, Рё РјРЅРѕРіРёРµ системы управления базами данных Рё даже операционные системы включили Java РІ СЃРІРѕРµ СЏРґСЂРѕ, например Oracle, Linux, MacOS X, AIX. Что еще РЅРµ охвачено? Назовите Рё через полгода услышите, что Java уже РІРѕРІСЃСЋ применяется Рё там. РР·-Р·Р° этой размытости самого понятия его описывают таким же размытым словом — технология.
Такое быстрое Рё широкое распространение технологии Java РЅРµ РІ последнюю очередь связано СЃ тем, что РѕРЅР° использует новый, специально созданный язык программирования, который так Рё называется — язык Java. Ртот язык создан РЅР° базе языков Smalltalk,
Pascal, C++ и др., вобрав их лучшие, по мнению создателей, черты и отбросив худшие. На этот счет есть разные мнения, но бесспорно, что язык получился удобным для изучения, написанные на нем программы легко читаются и отлаживаются: первую программу можно написать уже через час после начала изучения языка. Язык Java становится языком обучения объектно-ориентированному программированию, так же как язык Pascal был языком обучения структурному программированию. Недаром на Java уже написано огромное количество программ, библиотек классов, а собственный апплет не написал только уж совсем ленивый.
Для полноты картины следует сказать, что создавать приложения для технологии Java можно не только на языке Java, есть и другие языки: Clojure, Scala, Jython, есть даже компиляторы с языков Pascal и C++, но лучше все-таки использовать язык Java: на нем все аспекты технологии излагаются проще и удобнее.
Язык Java часто используется для описания различных приемов объектно-ориентированного программирования, так же как для записи алгоритмов применялся вначале язык Algol, а затем язык Pascal.
РЇСЃРЅРѕ, что РІСЃСЋ технологию Java нельзя изложить РІ РѕРґРЅРѕР№ РєРЅРёРіРµ, полное описание ее возможностей составит целую библиотеку. Рта РєРЅРёРіР° посвящена только языку Java. Прочитав ее, РІС‹ сможете создавать Java-приложения любой сложности, СЃРІРѕР±РѕРґРЅРѕ разбираться РІ литературе Рё листингах программ, продолжать изучение аспектов технологии Java РїРѕ специальной литературе Рё РїРѕ исходным кодам СЃРІРѕР±РѕРґРЅРѕ распространяемых программных продуктов.
Язык Java тоже очень бурно развивается, некоторые его методы объявляются устаревшими (deprecated), появляются новые конструкции, увеличивается встроенная библиотека классов, но есть устоявшееся ядро языка, сохраняется его дух и стиль. Вот это-то устоявшееся и излагается в книге.
Структура книги
Книга состоит из пяти частей.
Часть I содержит три главы, в которых рассматриваются базовые понятия языка. По прочтении ее вы сможете свободно разбираться в понятиях объектно-ориентированного программирования и их реализации на языке Java, создавать свои объектноориентированные программы, рассчитанные на консольный ввод/вывод.
В главе 1 описываются типы исходных данных, операции с ними, выражения, массивы, операторы управления потоком информации, приводятся примеры записи часто встречающихся алгоритмов на Java. После знакомства с этой главой вы сможете писать программы на Java, реализующие любые вычислительные алгоритмы, встречающиеся в вашей практике.
Р’ главе 2 вводятся основные понятия объектно-ориентированного программирования: объект Рё метод, абстракция, инкапсуляция, наследование, полиморфизм, контракты методов Рё РёС… поручения РґСЂСѓРі РґСЂСѓРіСѓ. Рта глава призвана привить вам "объектный" взгляд РЅР° реализацию сложных проектов, после ее прочтения РІС‹ научитесь описывать проект как совокупность взаимодействующих объектов. Здесь же предлагается реализация всех этих понятий РЅР° языке Java. РўСѓС‚ РІС‹, наконец, поймете, что же такое эти объекты Рё как РѕРЅРё взаимодействуют.
В главе 3 определяются пакеты классов и интерфейсы, ограничения доступа к классам и методам, на примерах подробно разбираются правила их использования. Объясняется структура встроенной библиотеки классов Java API.
В части II рассматриваются пакеты основных классов, составляющих неотъемлемую часть Java, разбираются приемы работы с ними и приводятся примеры практического использования основных классов. Здесь вы увидите, как идеи объектноориентированного программирования реализуются на практике в сложных производственных библиотеках классов. После изучения этой части вы сможете реализовывать наиболее часто встречающиеся ситуации объектно-ориентированного программирования с помощью стандартных классов.
Глава 4 прослеживает иерархию стандартных классов и интерфейсов Java, на этом примере показано, как в профессиональных системах программирования реализуются концепции абстракции, инкапсуляции и наследования.
В главе 5 подробно излагаются приемы работы со строками символов, которые, как и всё в Java, являются объектами, приводятся примеры синтаксического анализа текстов, обсуждаются вопросы русификации.
В главе 6 показано, как в языке Java реализованы коллекции, позволяющие работать с совокупностями объектов и создавать сложные структуры данных.
Глава 7 описывает различные классы-утилиты, полезные во многих ситуациях при работе с датами, случайными числами, словарями и другими необходимыми элементами программ.
Р’ части III объясняется создание графического интерфейса пользователя (Р“РРџ) СЃ помощью стандартной библиотеки классов AWT (Abstract Window Toolkit) СЃ компонентами Swing Рё даны многочисленные примеры построения интерфейса. РџРѕРґСЂРѕР±РЅРѕ разбирается принятый РІ Java метод обработки событий, основанный РЅР° идее делегирования. Здесь же появляются апплеты как программы Java, работающие РІ РѕРєРЅРµ браузера. РџРѕРґСЂРѕР±РЅРѕ обсуждается система безопасности выполнения апплетов. После прочтения третьей части РІС‹ сможете создавать СЃ помощью Swing полноценные приложения РїРѕРґ графические платформы MS Windows, X Window System Рё РґСЂ., Р° также программировать браузеры.
Глава 8 описывает иерархию классов библиотеки AWT, которую необходимо четко себе представлять для создания удобного интерфейса. Здесь же рассматривается библиотека графических компонентов Swing, ставшая стандартной наряду с AWT.
В главе 9 демонстрируются приемы рисования с помощью графических примитивов, способы задания цвета и использование шрифтов, а также решается вопрос русификации приложений Java.
В главе 10 обсуждается понятие графического компонента, рассматриваются готовые компоненты AWT и их применение, а также создание собственных компонентов AWT.
В главе 11 рассматриваются графические компоненты общего назначения, относящиеся к библиотеке Swing.
В главе 12 рассматриваются текстовые графические компоненты библиотеки Swing.
В главе 13 подробно обсуждаются возможности создания таблиц средствами Swing.
В главе 14 показано, какие способы размещения компонентов в графическом контейнере имеются в AWT и Swing и как их применять в разных ситуациях.
В главе 15 вводятся способы реагирования компонентов на сигналы от клавиатуры и мыши, а именно модель делегирования, принятая в Java.
В главе 16 описывается создание рамок, окружающих графические компоненты Swing.
В главе 17 обсуждается интересная способность Swing изменять свой внешний вид, сливаясь с окружающей графической средой или, наоборот, выделяясь из нее.
В главе 18, наконец-то, появляются апплеты — Java-программы, предназначенные для выполнения в окне браузера, и обсуждаются особенности их создания.
В главе 19 собраны сведения о библиотеке Swing, не вошедшие в предыдущие главы.
В главе 20 рассматривается работа с изображениями и звуком средствами AWT.
В части IV изучаются конструкции языка Java, не связанные общей темой. Некоторые из них необходимы для создания надежных программ, учитывающих все нештатные ситуации, другие позволяют реализовывать сложное взаимодействие объектов. Здесь же рассматривается передача потоков данных от одной программы Java к другой. Внимательное изучение четвертой части позволит вам дополнить свои разработки гибкими средствами управления выполнением приложения, создавать сложные клиентсерверные системы.
Глава 21 описывает встроенные в Java средства обработки исключительных ситуаций, возникающих во время выполнения готовой программы.
Глава 22 рассказывает об интересном свойстве языка Java — способности создавать подпроцессы (threads) и управлять их взаимодействием прямо из программы.
В главе 23 обсуждается концепция потока данных и ее реализация в Java для организации ввода/вывода на внешние устройства.
Глава 24 рассматривает сетевые средства языка Java, позволяющие скрыть РІСЃРµ сложности протоколов Рнтернета Рё максимально облегчить написание клиент-серверных Рё распределенных приложений.
Часть V книги посвящена Web-технологии Java, точнее, тех ее разделов, которые касаются программирования серверов.
В главе 25 описываются те аспекты технологии Java, которые необходимы для Web-программирования: архиватор JAR, компоненты JavaBeans, драйверы соединения с базами данных JDBC.
Глава 26 посвящена основному средству программирования серверов — сервлетам.
В главе 27 разбираются страницы JSP, значительно облегчающие оформление ответов на запросы Web-клиентов.
Наконец, в главе 28 рассматривается вездесущая технология XML и инструменты Java для обработки документов XML.
Выполнение Java-программы
Как вы знаете, программа, написанная на одном из языков высокого уровня, к которым относится и язык Java, так называемый исходный модуль ("исходник", или "сырец" на жаргоне от английского source), не может быть сразу же выполнена. Ее сначала надо скомпилировать, т. е. перевести в последовательность машинных команд — объектный модуль. Но и он, как правило, не может быть сразу же выполнен: объектный модуль надо еще скомпоновать с библиотеками использованных в модуле функций и разрешить перекрестные ссылки между секциями объектного модуля, получив в результате загрузочный модуль — полностью готовую к выполнению программу.
Рсходный модуль, написанный РЅР° Java, РЅРµ может избежать этих процедур, РЅРѕ здесь проявляется главная особенность технологии Java — программа компилируется сразу РІ машинные команды, РЅРѕ РЅРµ команды какого-то конкретного процессора, Р° РІ команды так называемой виртуальной машины Java (Java Virtual Machine, JVM). Виртуальная машина Java — это совокупность команд вместе СЃ системой РёС… выполнения. Для специалистов скажем, что виртуальная машина Java полностью стековая, так что РЅРµ требуется сложная адресация ячеек памяти Рё большое количество регистров. Поэтому команды JVM короткие, большинство РёР· РЅРёС… имеет длину 1 байт, отчего команды JVM называют байт-кодами (bytecodes), хотя имеются команды длиной 2 Рё 3 байта. Согласно статистическим исследованиям средняя длина команды составляет 1,8 байта. Полное описание команд Рё всей архитектуры JVM содержится РІ спецификации виртуальной машины Java (Virtual Machine Specification, VMS). Ознакомьтесь СЃ этой спецификацией, если РІС‹ хотите РІ точности узнать, как работает виртуальная машина Java.
Другая особенность Java — РІСЃРµ стандартные функции, вызываемые РІ программе, подключаются Рє ней только РЅР° этапе выполнения, Р° РЅРµ включаются РІ байт-РєРѕРґС‹. Как РіРѕРІРѕСЂСЏС‚ специалисты, РїСЂРѕРёСЃС…РѕРґРёС‚ динамическая РєРѕРјРїРѕРЅРѕРІРєР° (dynamic binding). Рто тоже сильно уменьшает объем скомпилированной программы.
Ртак, РЅР° первом этапе программа, написанная РЅР° языке Java, переводится компилятором РІ байт-РєРѕРґС‹. Рта компиляция РЅРµ зависит РѕС‚ типа какого-либо конкретного процессора Рё архитектуры конкретного компьютера. РћРЅР° может быть выполнена РѕРґРёРЅ раз сразу же после написания программы, программу РЅРµ надо перекомпилировать РїРѕРґ разные платформы. Байт-РєРѕРґС‹ записываются РІ РѕРґРЅРѕРј или нескольких файлах, РјРѕРіСѓС‚ храниться РІРѕ внешней памяти или передаваться РїРѕ сети. Рто особенно СѓРґРѕР±РЅРѕ благодаря небольшому размеру файлов СЃ байт-кодами. Затем полученные РІ результате компиляции байткоды можно выполнять РЅР° любом компьютере, имеющем систему, реализующую JVM. РџСЂРё этом РЅРµ важен РЅРё тип процессора, РЅРё архитектура компьютера. Так реализуется принцип Java "Write once, run anywhere" — "Написано однажды, выполняется РіРґРµ СѓРіРѕРґРЅРѕ".
Рнтерпретация байт-РєРѕРґРѕРІ Рё динамическая РєРѕРјРїРѕРЅРѕРІРєР° значительно замедляют выполнение программ. Рто РЅРµ имеет значения РІ тех ситуациях, РєРѕРіРґР° байт-РєРѕРґС‹ передаются РїРѕ сети, сеть РІСЃРµ равно медленнее любой интерпретации, РЅРѕ РІ РґСЂСѓРіРёС… ситуациях требуется мощный Рё быстрый компьютер. Поэтому постоянно идет усовершенствование интерпретаторов РІ сторону увеличения скорости интерпретации. Разработаны JIT-компиляторы (Just-In-Time), запоминающие уже интерпретированные участки РєРѕРґР° РІ машинных командах процессора Рё просто выполняющие эти участки РїСЂРё повторном обращении, например РІ циклах. Рто значительно увеличивает скорость повторяющихся вычислений. Корпорация Sun Microsystems разработала целую технологию HotSpot Рё включает ее РІ СЃРІРѕСЋ виртуальную машину Java. РќРѕ, конечно, наибольшую скорость может дать только специализированный процессор.
Компания Sun Microsystems выпустила микропроцессоры picoJava, работающие РЅР° системе команд JVM. Есть Java-процессоры Рё РґСЂСѓРіРёС… фирм. Рти процессоры непосредственно выполняют байт-РєРѕРґС‹. РќРѕ РїСЂРё выполнении программ Java РЅР° РґСЂСѓРіРёС… процессорах требуется еще интерпретация команд JVM РІ команды конкретного процессора, Р° значит, нужна программа-интерпретатор, причем для каждого типа процессоров Рё для каждой архитектуры компьютера следует написать СЃРІРѕР№ интерпретатор.
Рта задача уже решена практически для всех компьютерных платформ. РќР° РЅРёС… реализованы виртуальные машины Java, Р° для наиболее распространенных платформ имеется несколько реализаций JVM разных фирм. Р’СЃРµ больше операционных систем Рё систем управления базами данных включают реализацию JVM РІ СЃРІРѕРµ СЏРґСЂРѕ. Создана Рё специальная операционная система JavaOS, применяемая РІ электронных устройствах. Р’ большинство браузеров встроена виртуальная машина Java для выполнения апплетов. Операционная система Andriod содержит виртуальную машину Java, называемую Dalvik, которая работает РЅР° СЏРґСЂРµ Linux.
Программы, приведенные РІ этой РєРЅРёРіРµ, выполнялись РІ операционных средах программирования MS Windows 2000/XP/Server 2003, Red Hat Linux, Fedora Core Linux, SUSE Linux без перекомпиляции. Рто РІРёРґРЅРѕ РїРѕ рисункам, приведенным РІРѕ РјРЅРѕРіРёС… главах РєРЅРёРіРё. РћРЅРё "сняты" СЃ экранов графических оболочек разных операционных систем.
Внимательный читатель уже заметил, что РєСЂРѕРјРµ реализации JVM для выполнения байткодов РЅР° компьютере еще нужно иметь набор функций, вызываемых РёР· байт-РєРѕРґРѕРІ Рё динамически компонующихся СЃ байт-кодами. Ртот набор оформляется РІ РІРёРґРµ библиотеки классов Java, состоящей РёР· РѕРґРЅРѕРіРѕ или нескольких пакетов. Каждая функция может быть записана байт-кодами, РЅРѕ, поскольку РѕРЅР° будет храниться РЅР° конкретном компьютере, ее можно записать РїСЂСЏРјРѕ РІ системе команд этого компьютера, избегнув тем самым интерпретации байт-РєРѕРґРѕРІ. Такие функции, написанные чаще всего РЅР° языке C/C++ Рё скомпилированные РїРѕРґ определенную платформу, называют "родными" методами (native methods). Применение "родных" методов ускоряет выполнение программы.
Корпорация Oracle, купившая фирму Sun Microsystems — создателя технологии Java, — бесплатно распространяет набор необходимых программных инструментов для полного цикла работы с этим языком программирования: компиляции, интерпретации, отладки, включающий и богатую библиотеку классов. Называется этот набор JDK (Java Development Kit). Он весь содержится в одном файле. Есть наборы инструментальных программ и других фирм. Например, большой популярностью пользуется JDK корпорации IBM.
Что такое JDK?
Набор программ и классов JDK содержит:
□ компилятор из исходного текста в байт-коды j avac;
□ интерпретатор j ava, содержащий реализацию JVM;
□ облегченный интерпретатор j re (в последних версиях отсутствует);
□ программу просмотра апплетов appietviewer, заменяющую браузер;
□ отладчик j db;
□ дизассемблер javap;
□ программу архивации и сжатия jar;
□ программу сбора и генерирования документации j avadoc;
□ программу генерации заголовочных файлов языка С для создания "родных" методов
j avah;
□ программу генерации электронных ключейkeytool;
□ программу native2ascii, преобразующую бинарные файлы в текстовые;
□ программы rmic и rmiregistry для работы с удаленными объектами;
□ программу seriaiver, определяющую номер версии класса;
□ библиотеки и заголовочные файлы "родных" методов;
□ библиотеку классов Java API (Application Programming Interface).
В прежние версии JDK включались и отладочные варианты исполнимых программ:
j avac g, j ava g Рё С‚. Рґ.
Компания Sun Microsystems активно развивала и обновляла JDK, почти каждый год выходили новые версии.
В 1996 г. была выпущена первая версия — JDK 1.0, которая модифицировалась до версии с номером 1.0.2. В этой версии библиотека классов Java API содержала 8 пакетов. Весь набор JDK 1.0.2 поставлялся в упакованном виде в одном файле размером около 5 Мбайт, а после распаковки занимал на диске около 8 Мбайт.
В 1997 г. появилась версия JDK 1.1, последняя ее модификация, 1.1.8, выпущена в 1998 г. В этой версии было 23 пакета классов, занимала она 8,5 Мбайт в упакованном виде и около 30 Мбайт — в распакованном.
В первых версиях JDK все пакеты библиотеки Java API были упакованы в один архивный файл classes.zip и вызывались непосредственно из этого архива, его не нужно было распаковывать.
Затем набор инструментальных средств JDK был сильно переработан.
Версия JDK 1.2 вышла в декабре 1998 г. и содержала уже 57 пакетов классов. В архивном виде это файл размером почти 20 Мбайт и еще отдельный файл размером более 17 Мбайт с упакованной документацией. Полная версия располагается на 130 Мбайт дискового пространства, из них около 80 Мбайт занимает документация.
Начиная с этой версии, все продукты технологии Java собственного производства компания Sun стала называть Java 2 Platform, Standard Edition, сокращенно J2SE, а в литературе утвердилось название Java 2. Кроме 57 пакетов классов, обязательных на любой платформе и получивших название Core API, в Java 2 JDK 1.2 входят еще дополнительные пакеты классов, называемые Standard Extension API.
В версии J2SE JDK 1.5.0, вышедшей в конце 2004 г., было уже под сотню пакетов, составляющих Core API (Application Programming Interface). В упакованном виде — это файл размером около 46 Мбайт и необязательный файл с упакованной документацией такого же размера. В это же время произошло очередное переименование технологии
Java: из версии убрали первую цифру и стали писать Java 2 Platform, Standard Edition
5.0, сокращенно J2SE 5.0 и JDK 5.0, хотя во внутрифирменной документации сохраняется название JDK 1.5.0.
Последнее обновление J2SE 5.0, JDK 1.5.0_22, было выпущено 3 ноября 2009 года.
В шестой версии, вышедшей в начале 2007 г., из названия технологии убрали цифру 2 и стали писать Java Platform, Standard Edition 6, сокращенно — Java SE 6 и JDK 6. Впрочем, во внутрифирменной документации остается прежнее обозначение, например последнее на момент написания книги обновление обозначается JDK 1.6.0_26.
Летом 2011 года появилась седьмая версия Java SE 7 и распространяется JDK 1.7.0, описанию которой посвящена эта книга.
Java SE JDK создается для каждой платформы: MS Windows, Solaris, Linux, отдельно, а документация написана на языке HTML и одинакова на всех платформах. Поэтому она записана в отдельном файле. Например, для MS Windows файл с Java SE JDK 1.7.0 называется jdk-7-windows-i586.exe с добавлением номера обновления, а файл с документацией называется jdk-7-fcs-bin-b147-apidocs-27_jun_2011.zip.
Рти файлы можно совершенно СЃРІРѕР±РѕРґРЅРѕ скачать СЃРѕ страницы technetwork/java/javase/downloads/index.html.
Для создания Web-программ в части V книги вам потребуется еще набор пакетов Java Platform, Enterprise Edition (Java EE). Так же как Java SE, он поставляется одним самораспаковывающимся архивом, в который входит SDK (Software Development Kit), Java EE API и сервер приложений. Архив можно скопировать с того же сайта. Набор Java EE SDK — это дополнение к Java SE и поэтому устанавливается после Java SE JDK. Впрочем, на том же сайте есть полная версия архива, содержащая в себе и Java EE SDK, и Java SE JDK.
Java EE входит в состав серверов приложений, поэтому если вы установили JBoss, GlassFish или другой сервер приложений, то у вас уже есть набор классов Java EE.
Кроме JDK компания Oracle отдельно распространяет еще и набор JRE (Java Runtime Environment).
Что такое JRE?
Набор программ Рё пакетов классов JRE содержит РІСЃРµ необходимое для выполнения байт-РєРѕРґРѕРІ, РІ том числе интерпретатор java (РІ прежних версиях — облегченный интерпретатор jre) Рё библиотеку классов. Рто часть JDK, РЅРµ содержащая компиляторы, отладчики Рё РґСЂСѓРіРёРµ средства разработки. Рменно Oracle JRE или его аналог, созданный РґСЂСѓРіРёРјРё фирмами, присутствует РІ тех браузерах, которые умеют выполнять программы РЅР° Java, РІ операционных системах Рё системах управления базами данных.
Хотя JRE входит в состав JDK, корпорация Oracle распространяет этот набор и отдельным файлом.
Как установить JDK?
Напомню, что набор JDK упаковывается РІ самораспаковывающийся архив. Раздобыв каким-либо образом этот архив: скачав РёР· Рнтернета, СЃ сайта technetwork/java/javase/downloads/index.html или какого-то РґСЂСѓРіРѕРіРѕ адреса, вам остается только запустить файл СЃ архивом РЅР° выполнение. Откроется РѕРєРЅРѕ установки, РІ котором среди всего прочего вам будет предложено выбрать каталог (directory) установки, например, /usr/java/jdk1.7.0. Каталог Рё его название можно поменять, место Рё название установки РЅРµ имеют значения.
После установки вы получите каталог с названием, например, jdk1.7.0, а в нем подкаталоги:
□ bin с исполнимыми файлами;
□ db с небольшой базой данных;
□ demo с примерами программ, присутствует не во всех версиях JDK;
□ docs с документацией, если вы ее установили в этот каталог;
□ include с заголовочными файлами "родных" методов;
□ jre с набором JRE;
□ lib с библиотеками классов и файлами свойств;
□ sample с примерами программ, присутствует не во всех версиях JDK;
□ src с исходными текстами программ JDK, получаемый после распаковки файла src.zip.
Да-РґР°! Набор JDK содержит исходные тексты большинства СЃРІРѕРёС… программ, написанные РЅР° Java. Рто очень СѓРґРѕР±РЅРѕ. Р’С‹ всегда можете РІ точности узнать, как работает тот или РёРЅРѕР№ метод обработки информации РёР· JDK, посмотрев исходный РєРѕРґ данного метода. Рто очень полезно Рё для изучения Java РЅР° "живых", работающих примерах.
Предупреждение
Не следует распаковывать zip- и jar-архивы, кроме архива исходных текстов src.zip.
После установки надо дополнить значение системной переменной path, добавив в нее путь к каталогу bin, например /usr/java/jdk1.7.0/bin. Некоторые программы, использующие Java, требуют определить и специальную переменную окружения java_home, содержащую путь к каталогу установки JDK, например /usr/j ava/j dk1.7.0.
Проверить правильность установки Java, а заодно и посмотреть ее версию можно, набрав в командной строке
java -version
Как использовать JDK?
Несмотря на то что набор JDK предназначен для создания программ, работающих в графических средах, таких как MS Windows или X Window System, он ориентирован на выполнение из командной строки окна Command Prompt в MS Windows. В системах UNIX, Linux, BSD можно работать и в текстовом режиме, и в окне Xterm.
Написать программу на Java можно в любом текстовом редакторе, например Notepad, WordPad в MS Windows, редакторах vi, emacs в UNIX. Надо только сохранить файл в текстовом, а не графическом формате и дать ему расширение java. Пусть, для примера, именем файла будет MyProgramjava, а сам файл сохранен в текущем каталоге.
После создания этого файла из командной строки вызывается компилятор javac и ему передается исходный файл как параметр:
javac MyProgram.java
Компилятор создает в том же каталоге по одному файлу на каждый класс, описанный в программе, называя каждый файл именем класса с расширением class. Допустим, в нашем примере имеется только один класс, названный MyProgram, тогда получаем файл с именем MyProgram.class, содержащий байт-коды.
Компилятор молчалив — если компиляция прошла успешно, он ничего не сообщит, на экране появится только приглашение операционной системы. Если же компилятор заметит ошибки, то он выведет на экран сообщения о них. Большое достоинство компилятора JDK в том, что он "отлавливает" много ошибок и выдает подробные и понятные сообщения.
Далее из командной строки вызывается интерпретатор байт-кодов java, которому передается файл с байт-кодами, причем его имя записывается без расширения (смысл этого вы узнаете позднее):
java MyProgram
На экране появится вывод результатов работы программы или сообщения об ошибках времени выполнения.
Работая в графических оболочках операционных систем, мы привыкли вызывать программу на исполнение двойным щелчком мыши по имени исполнимого файла (в MS Windows у имени исполнимого файла стандартное расширение exe) или щелчком по его ярлыку. В технологии Java тоже есть такая возможность. Надо только упаковать class-файлы с байт-кодами в архив специального вида JAR. Как это сделать, рассказано в главе 25. При установке JDK на MS Windows для файлов с расширением jar автоматически создается ассоциация с интерпретатором java, который будет вызван при двойном щелчке мыши на jar-архиве.
Кроме того, можно написать командный файл (файл с расширением bat в MS Windows или Shell-файл командной оболочки в UNIX), записав в нем строку вызова интерпретатора java со всеми нужными параметрами.
Еще РѕРґРёРЅ СЃРїРѕСЃРѕР± запустить Java-программу средствами операционной системы — написать загрузчик (launcher) виртуальной машины Java. Так Рё сделано РІ стандартной поставке JDK: исполнимый файл java.exe содержит программу, написанную РЅР° языке РЎ, которая запускает виртуальную машину Java Рё передает ей РЅР° исполнение класс Java СЃ методом main (). Рсходный текст этой программы есть среди исходных текстов Java РІ каталоге src/launcher. РРј можно воспользоваться для написания своего загрузчика. Есть РјРЅРѕРіРѕ программ, облегчающих написание загрузчика, например программа Java Launcher фирмы SyncEdit, , или Advanced Installer for Java фирмы Caphyon, .
Наконец, существуют компиляторы РёСЃС…РѕРґРЅРѕРіРѕ текста, написанного РЅР° языке Java, непосредственно РІ исполнимый файл операционной системы, СЃ которой РІС‹ работаете. РС… общее название AOT (Ahead-Of-Time) compiler. Например, Сѓ знаменитого компилятора GCC (GNU Compiler Collection) есть РІС…РѕРґ СЃ именем GCJ, СЃ помощью которого можно сделать компиляцию как РІ байт-РєРѕРґС‹, так Рё РІ исполнимый файл, Р° также перекомпиляцию байт-РєРѕРґРѕРІ РІ исполнимый файл.
Если работа из командной строки, столь милая сердцу "юниксоидов", кажется вам несколько устаревшей, используйте для разработки интегрированную среду.
Рнтегрированные среды Java
Сразу же после создания Java, уже РІ 1996 Рі., появились интегрированные среды разработки программ IDE (Integrated Development Environment) для Java, Рё РёС… число РІСЃРµ время возрастает. Некоторые РёР· РЅРёС…, такие как Eclipse, IntelliJ IDEA, NetBeans, являются просто интегрированными оболочками над JDK, вызывающими РёР· РѕРґРЅРѕРіРѕ РѕРєРЅР° текстовый редактор, компилятор Рё интерпретатор. Рти интегрированные среды требуют предварительной установки JDK. Впрочем, Eclipse содержит собственный компилятор.
Другие интегрированные среды содержат JDK РІ себе или имеют собственный компилятор, например JBuilder фирмы Embarcadero или IBM Rational Application Developer. РС… можно устанавливать, РЅРµ имея РїРѕРґ руками JDK. Надо заметить, что перечисленные продукты сами написаны полностью РЅР° Java.
Большинство интегрированных сред являются средствами визуального программирования и позволяют быстро создавать пользовательский интерфейс, т. е. относятся к классу средств RAD (Rapid Application Development).
Выбор какого-либо средства разработки диктуется, во-первых, возможностями вашего компьютера, ведь визуальные среды требуют больших ресурсов; во-вторых, личным вкусом; в-третьих, уже после некоторой практики, достоинствами компилятора, встроенного в программный продукт.
К технологии Java подключились и разработчики CASE-средств. Например, популярный во всем мире продукт Rational Rose может сгенерировать код на Java.
Для изучения Java, пожалуй, удобнее всего интегрированная среда NetBeans IDE, которую можно свободно скопировать с сайта . Она содержит много примеров, статей и учебников по различным разделам Java.
Особая позиция Microsoft
Р’С‹ уже, наверное, почувствовали смутное беспокойство, РЅРµ встречая название этой корпорации. Дело РІ том, что, имея СЃРІРѕСЋ операционную систему, РѕРіСЂРѕРјРЅРѕРµ число приложений Рє ней Рё богатейшую библиотеку классов, Microsoft РЅРµ имела нужды РІ Java. РќРѕ Рё пройти РјРёРјРѕ технологии, распространившейся РІСЃСЋРґСѓ, компания Microsoft РЅРµ могла Рё создала СЃРІРѕР№ компилятор Java, Р° также визуальное средство разработки, входящее РІ Visual Studio. Данный компилятор включает РІ байт-РєРѕРґС‹ вызовы объектов ActiveX. Следовательно, выполнять эти байт-РєРѕРґС‹ можно только РЅР° компьютерах, имеющих доступ Рє ActiveX. Рта "нечистая" Java резко ограничивает РєСЂСѓРі применения байт-РєРѕРґРѕРІ, созданных компилятором корпорации Microsoft. Р’ результате судебных разбирательств СЃ Sun Microsystems компания Microsoft назвала СЃРІРѕР№ РїСЂРѕРґСѓРєС‚ Visual J++. Виртуальная машина Java корпорации Microsoft умеет выполнять байт-РєРѕРґС‹, созданные "чистым" компилятором, РЅРѕ РЅРµ РІСЃСЏРєРёР№ интерпретатор выполнит байт-РєРѕРґС‹, написанные СЃ помощью Visual J++. Ртот РїСЂРѕРґСѓРєС‚ вошел РІ состав Visual Studio .NET 2005 РїРѕРґ названием
J# (J sharp), но он генерирует не байт-коды JVM, а код .NET Framework CLR. Язык J# не получил распространения и был исключен из дальнейших версий Visual Studio .NET.
Чтобы прекратить появление несовместимых версий Java, корпорация Sun разработала концепцию "чистой" Java, назвав ее Pure Java, и систему проверочных тестов на "чистоту" байт-кодов. Появились байт-коды, успешно прошедшие тесты, и средства разработки, выдающие "чистый" код и помеченные как "100 % Pure Java”.
Кроме того, компания Sun распространяет пакет программ Java Plug-in, который можно подключить к браузеру, заменив тем самым встроенный в браузер JRE на "родной".
Java РІ Рнтернете
Разработанная для применения РІ компьютерных сетях, Java просто РЅРµ могла РЅРµ найти отражения РЅР° сайтах Рнтернета. Действительно, масса сайтов полностью посвящена технологии Java или содержит информацию Рѕ ней. РћРґРЅР° только компания Oracle имеет несколько сайтов СЃ информацией Рѕ Java:
□ — основной сайт Java, отсюда можно скопировать JDK;
□ — форумы для разработчиков Java;
□ http :// — сайт для разработчиков, знакомящихся с технологией Java.
На сайте корпорации IBM есть большой раздел , где можно найти очень много полезного для программиста.
Корпорация Microsoft содержит информацию о Java на сайте .
Существует множество специализированных сайтов:
□ — форумы для разработчиков, в том числе Java;
□ — большой сборник статей по Java;
□ — советы разработчикам Java и готовые программы;
□ — Java Review Service;
□ — новостной сайт c русскими статьями, посвященный Java;
□ — еще один новостной сайт;
□ — новости, статьи и советы по Java;
□ — дружественный сайт и форум для разработчиков Java;
□ — электронный журнал;
□ — сборник программ и статей;
□ — советы специалистов;
□ — новинки технологии Java;
□ — вопросы создания серверных Java-приложений;
□ — большой сборник статей, апплетов и других программ;
□ — здесь обсуждаются вопросы безопасности;
□ — здесь обсуждаются вопросы написания сервлетов;
□ — общая информация о Java и не только о Java. Персональные сайты:
в–Ў / — сайт Брюса Рккеля, автора популярных РєРЅРёРі Рё статей;
□ — сайт Девида Рейли, автора многих статей и книг о Java.
К сожалению, адреса сайтов часто меняются, некоторые сайты перестают существовать, возникают другие сайты. Возможно, вы и не найдете некоторые из перечисленных сайтов, зато появится много других.
Литература по Java
Перечислим здесь только основные, официальные и почти официальные издания. Более полное описание чрезвычайно многочисленной литературы приведено в конце книги.
Полное и строгое описание языка изложено в книге James Gosling, Bill Joy, Guy Steele, Gilad Bracha, "The Java Language Specification, Third Edition". В электронном виде она находится по адресу , занимает в упакованном виде около 400 Кбайт.
Столь же полное и строгое описание виртуальной машины Java изложено в книге Tim Lindholm, Frank Yellin, "The Java Virtual Machine Specification, Second Edition". В электронном виде она находится по адресу .
Здесь же необходимо отметить РєРЅРёРіСѓ "отца" технологии Java Джеймса Гослинга, написанную вместе СЃ Кеном Арнольдом Рё Девидом Холмсом. Рмеется СЂСѓСЃСЃРєРёР№ перевод: Арнольд Рљ., Гослинг Дж., Холмс Р”. Язык программирования Java. 3-Рµ РёР·Рґ.: Пер. СЃ англ. — Рњ.: Рздательский РґРѕРј "Вильямс", 2001. — 624 СЃ.: РёР».
Официальным учебником хорошего стиля программирования РЅР° языке Java стала РєРЅРёРіР° Блоха Р”., Java. Рффективное программирование. Пер. СЃ англ. — Рњ.: Лори, 2008. — 223 СЃ. РќР° английском языке вышло второе издание этой РєРЅРёРіРё, значительно расширенное Рё обновленное.
Компания Oracle содержит на своем сайте постоянно обновляемый электронный учебник Java Tutorial, размером уже в несколько десятков мегабайт: . oracle.com/javase/tutorial/ /. Время от времени появляется его печатное издание: Mary Campione, Kathy Walrath, "The Java Tutorial, Second Edition: Object-Oriented Programming for the Internet".
Полное описание Java API содержится в документации, но есть печатное издание James Gosling, Frank Yellin and the Java Team, "The Java Application Programming Interface", Volume 1: Core Packages; Volume 2: Window Toolkit and Applets.
Благодарности
Я рад воспользоваться представившейся возможностью, чтобы поблагодарить всех принявших участие в выпуске этой книги.
Отдельная благодарность РРіРѕСЂСЋ Шишигину, предложившему ее издать Рё так быстро оформившему РґРѕРіРѕРІРѕСЂ, что автор РЅРµ успел передумать; РјРѕРёРј студентам СЃ РёС… бесконечными вопросами; СЃРІРѕРёРј "сплюснутым" РґСЂСѓР·СЊСЏРј, убежденным РІ том, что "Жаба — это отстой", Рё сыну, Камилю, для которого эта РєРЅРёРіР°, собственно, Рё писалась.