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

Секреты программирования для Internet на Java

.pdf
Скачиваний:
181
Добавлен:
02.05.2014
Размер:
3.59 Mб
Скачать

В C и C++ указателем является целое число, представляющее собой адрес в памяти компьютера. Обращаясь к указателям в программах на C/C++, вы на самом деле просите компьютер обратиться по определенному адресу в памяти. По этому адресу обычно расположены данные, которые вас интересуют. Над указателями можно совершать арифметические действия.

Арифметика указателей - часть языка C, вытекающая из его способности быть системным языком программирования. Когда программист занимается низко-уровневым программированием на определенной платформе, арифметика указателей действительно необходима. Для высокоуровневого программирования использование указателей - наоборот, плохая практика, часто приводящая к тому, что исходный текст программы невозможно понять. И поскольку применение указателей часто приводило к сбоям и ошибкам в работе программы, они были полностью удалены из Java.

СOВЕТ Если вы - искушенный программист, у вас, возможно, возник-нет вопрос: насколько вообще может быть полезен язык, не обладающий способностью прямого доступа к памяти. Несмотря на невозможность прямого доступа, в Java имеются ссылочные переменные - аналоги указателей из C/C++. С их помощью можно построить связанный список или, например, стек. Разница состоит в том, что при помощи ссылочной переменной невозможно обратиться к памяти напрямую или привести значение-адрес в памяти к целому числу.

Нет подстановки операторов

Многие языки программирования позволяют определить, что будет делать конкретный оператор, например +, применительно к различным типам данных. Подстановка оператора записывается как процедура, действующая определенным образом в зависимости от типа операндов. Вот пример подстановки операторов, где SetA и SetB являются определенными в программе наборами целых чисел:

SetA=SetA+SetB;

Что программист пытается здесь сделать? Мы не можем сказать в точности, мы можем только спросить у автора процедуры и надеяться, что он заложил в этот оператор интуитивно понятный смысл, например поочередное сложение каждого члена одного вектора с каждым членом другого. Но в любом случае подстановка операторов вызывает множество вопросов. Непонятно, что произойдет, если длина одного вектора окажется больше длины другого. Чтобы ответить на этот вопрос, нам все равно придется заглянуть в исходный код соответствующей процедуры. Поскольку подстановка операторов приводит к ухудшению читаемости текста и усложняет язык, разработчики Java решили не включать это свойство в язык Java.

Нет множественного наследования

Для тех, кто не знаком с концепцией объектно-ориентированного программирования, смысл следующих абзацев станет яснее после прочтения главы 3. Сейчас мы рассмотрим пример, участниками которого будут обыкновенные дети. Предположим, что в некоем сообществе людей у каждой семьи есть один родитель. Дети в этом сообществе ведут себя так: если они сами знают, как делается что-либо, они делают это. Если не знают - спрашивают родителя. Если родитель не знает - он спрашивает своего родителя и т. д. Перед вами очень простая модель единичного наследования.

В случае множественного наследования ребенок может спрашивать у нескольких родителей. Несомненно, это усложняет жизнь нашего гипотетического ребенка. Разные родители могут и советовать по-разному, как сделать ту или иную вещь.

Когда мы пишем на объектно-ориентированном языке, модули нашей программы могут наследовать способы сделать что-либо в точности так, как это происходит в нашем примере. Если в языке допускается множественное наследование, он должен быть сложнее, так же как и проблемы, которые ему приходится решать. Почему в некоторых языках существует множественное наследование. Мы подробнее рассмотрим это в главе 3, а пока скажем, что программные модули зависят от параметров нескольких родительских модулей. Концепция, применяемая в Java, лишена необходимости применять множественное наследование.

Объектная ориентация

Как мы уже говорили, Java отчасти хорош уже только потому, что он новый язык. Однако одно из самых серьезных его преимуществ заключается в объектной ориентации. Давайте рассмотрим, что означает объектная ориентация и как она реализована в Java.

Ⱦɚɧɧɚɹ ɜɟɪɫɢɹ ɤɧɢɝɢ ɜɵɩɭɳɟɧɚ ɷɥɟɤɬɪɨɧɧɵɦ ɢɡɞɚɬɟɥɶɫɬɜɨɦ %RRNV VKRS Ɋɚɫɩɪɨɫɬɪɚɧɟɧɢɟ ɩɪɨɞɚɠɚ ɩɟɪɟɡɚɩɢɫɶ ɞɚɧɧɨɣ ɤɧɢɝɢ ɢɥɢ ɟɟ ɱɚɫɬɟɣ ɁȺɉɊȿɓȿɇɕ Ɉ ɜɫɟɯ ɧɚɪɭɲɟɧɢɹɯ ɩɪɨɫɶɛɚ ɫɨɨɛɳɚɬɶ ɩɨ ɚɞɪɟɫɭ piracy@books-shop.com

Для того чтобы понять принцип объектной ориентации, достаточно запомнить один факт: компьютер не мыслит так, как это делают люди. Он просто запоминает в своих регистрах нули и единицы. Антитезисом к слову "интуиция" является слово "язык ассемблера" - очень узкий угол зрения на решение вселенских проблем. Компьютеры живут в упрощенном мире, мы, наоборот, - в чрезмерно сложном. Простая механическая операция, занимающая у нас часы, занимает у компьютера лишь сотые доли секунды, тогда как ученые до сих пор не нашли способа обучить компьютер составлению элементарно грамотного предложения на естественном языке.

На начальной стадии компьютерной эволюции мы были вынуждены играть по их правилам. Потом были разработаны языки, позволяющие более удобно для нас, людей, объяснять компьютерам, что именно мы от них хотим. Первым настоящим прорывом было создание процедурных языков. Вместо того чтобы передавать компьютеру огромный список инструкций, программист теперь мог ограничиться небольшим списком, инструкции из которого могли повторяться многократно - это называется подпрограммами.

Объектная ориентация дала нам в руки новый уровень абстракции. Правда, этот подход попрежнему далек от того, как мы привыкли приниматься за решение проблемы. Попробуйте визуализировать следующие инструкции: "пойди в магазин, купи молока, вернись домой". Мы предписали совершить три определенных действия, однако скорее всего вы начнете думать над задачей, ориентируясь не на глаголы, а на существительные. Например, вам не хочется, чтобы купленное молоко было скисшим, и не хочется идти в тот магазин, где молоко не продается. Если мы спросим, как вы будете решать эту задачу, вы ответите: "Начиная с той позиции, где я сейчас нахожусь, я пойду поищу какое-нибудь транспортное средство и проеду до того магазина, где продается молоко. Затем я куплю молоко, проверив, не скисшее ли оно, а затем вернусь в то место, где я живу".

Суть нашей молочной задачи состоит в том, что мы имеем дело со свойствами объектов - молока, магазина, места проживания. Процедурные языки программирования заставляют сконцентрироваться на действиях, которые необходимо совершить для решения проблемы. Объектно-ориентированные языки позволяют рассматривать ситуацию с точки зрения вовлеченных в нее объектов и их свойств. Вместо того чтобы проверять каждый пакет молока в поисках свежего, мы можем приписать объекту "молоко" свойство "скисшее". В табл. 1-1 проиллюстрированы все наши объекты, их свойства и вопросы, которые к ним применимы.

 

Таблица 1-1. Объекты, вовлеченные в нашу задачу

Объект

Данные

Вопросы

Транспортное средство Дальность поездки Какие магазины находятся в пределах дальности?

Молоко

Срок годности

 

 

Цена

Сколько времени молоко еще не скиснет?

 

 

Насколько дорого молоко?

Магазин

Местонахождение

В этом магазине продается молоко?

Дом

Местонахождение

Доеду ли я до дома?

 

Владелец

Это мой дом?

Программа на Java записывается в рамках представления объектов, вовлеченных в задачу. Как будет видно из главы 3, наши объекты будут весьма точно повторять подход, отраженный в табл. 1-1. Например, для того чтобы запрограммировать разобранную ситуацию на Java, необходимо написать процедуры, отвечающие на поставленные в третьем столбце вопросы и присваивающие значения переменным, указанным во втором столбце таблицы. Разница в том, что эти процедуры относятся исключительно к объектам. Это ключевой момент в объектноориентированном программировании - описывать задачу в тех терминах, в которых мы ее решаем сами.

Встроенная работа с сетью

С самого начала предполагалось, что Java будет сетевым языком программирования. Мы уже знакомы с преимуществами использования виртуальной машины Java. Она предотвращает возможность повреждения компьютера от действий загруженных по сети некорректных программ, позволяет программам загружаться быстро и не зависеть от архитектуры компьютера.

Все эти преимущества встроены в язык Java, и мы даже можем о них не думать, занимаясь повседневным программированием. Поскольку Java изначально предназначен для сети, в его интерфейс прикладного программирования, API, встроены механизмы взаимодействия с сетью. При помощи API мы можем работать с сетью как на высоком уровне абстракции, пользуясь услугами URL (Uniform Resource Locator), так и на самом низком уровне, просто перемещая пакеты данных туда и обратно.

www.books-shop.com

У нас есть возможность писать апплеты, общающиеся с компьютером, с которого они были загружены. В главе 19 мы напишем именно такой апплет. Апплет будет загружаться при помощи стандартного протокола HTTP (HyperText Transfer Protocol). HTTP предназначен только для извлечения информации, а не для обмена данными, поэтому загруженный апплет будет пользоваться собственным протоколом для последующего взаимодействия с Web-сервером.

В этом примере мы не занимались шифрованием передаваемых данных, но если захотите, вы без труда сможете его реализовать. Если вдруг вы изобретете новый механизм, скажем, сжатия видеоданных, вам достаточно будет написать апплет, который знает этот механизм, и сервер, знающий, как передавать видео. Вместо того чтобы писать громадную клиентскую программу и уговаривать людей ее установить, вы просто пишете апплет, который, загрузившись, сам становится клиентом для приема видео. API дает вам способ самостоятельно определить методы и протоколы передачи данных по сети, в то время как независимость от компьютерной платформы гарантирует, что апплет будет работать везде.

Java - динамический язык

Скомпилированная программа на C/C++ представляет собой монолитный файл, наполненный машинными инструкциями. В случае больших программ его размер исчисляется мегабайтами. Когда вы пишете большой проект, нередко случается, что в нем используется уже когда-то написанный код. В таком случае помогают библиотеки. При компиляции ваш код объединяется с кодом из библиотеки, и все это вместе становится исполняемой программой. Если в библиотеке обнаружится ошибка, каждая скомпилированная с ее помощью программа будет нуждаться в повторной компиляции. У Java-программ эта проблема отсутствует. Дело в том, что модули Javaпрограммы собираются только в момент ее исполнения, а до этого существуют отдельно друг от друга. Это значит, что модули Java-программы существуют независимо от программ, которым они принадлежат.

Java - многопотоковая среда

Вы хотели когда-нибудь быть одновременно в двух местах? Если да, то многопотоковое программирование - для вас. Так же как и объектная ориентация, многопотоковость придумана, чтобы облегчить вам жизнь как программисту. Ее задача - позволить описать набор действий, которые должны происходить одновременно.

Предположим, что вы пишете программу рисования на экране компьютера окружности, начиная с центра с постепенно возрастающим радиусом. Программу можно записать в псевдокоде следующим образом:

// псевдокод, а не Java! set_center set_the_color

radius=1 do {

draw_circle(radius) radius=radius+1

}

while (radius final_circle_size)

Вы показываете программу своему шефу, но он просит написать программу, рисующую одновременно две окружности. Назад, к рабочему столу! Результат вашего творчества напоминает следующее:

// псевдокод, а не Java! set_center_for_Circle1 set_center_for_Circle2 set_color_for_Circle1 set_color_for_Circle2 Circle1_radius=1 Circle2_radius=1

do {

if (Circle1_radius final_circle1_size) draw_circle1(Circle1_radius)

if (Circle2_radius final_circle2_size) draw_circle2(Circle2_radius)

www.books-shop.com

if (Circle1_radius final_circle1_size) Circle1_radius=Circle1_radius+1

if (Circle2_radius final_circle2_size) Circle2_radius=Circle2_radius+1

}

while (Circle1_radius final_circle1_size AND

Circle2_radius final_circle2_size)

Все, что мы здесь делаем, - это последовательно повторяем каждую инструкцию для обеих окружностей. Механическое повторение хорошо поддается программированию, в особенности многопотоковым способом. Вместо того чтобы повторять одни и те же инструкции для обеих окружностей, мы можем записать инструкции для одной, оформив их в виде потока, а затем запустить этот поток два раза для двух различных окружностей.

Если вы видели работу апплетов на Web, в частности анимацию, вы, вероятно, уже знакомы с внешним проявлением многопотоковости языка Java.

Что дальше?

Теперь, когда вы получили представление о том, что такое Java и апплеты, начнется настоящая работа. В следующей главе мы установим комплект разработчика Java (JDK) и напишем несколько простых программ. Затем в главе 3 мы познакомимся с объектной ориентацией в Java, объясним синтаксис и семантику языка в главе 4. В главе 5 мы напишем несколько простых апплетов. Далее мы изучим Java API, напишем массу профессиональных апплетов с использованием графических интерфейсов и апплетов, обменивающихся данными по сети.

www.books-shop.com

Глава 2

Основы программирования на Java

Первые шаги

Инсталляция для Windows 95/Windows NT Power PC Macintosh

UNIX

Первая программа на Java

Разбор параметров в командной строке Простой текстовый вывод

Как устроена Java-программа

Обзор структуры Java-программы Переменные Методы Классы Пакеты

Оболочка времени выполнения Java Процессы компиляции и выполнения Сборка мусора

Создание Java-апплетов Ваш первый апплет

Как устроен апплет

Интеграция апплетов в World Wide Web Автоматическое документирование кода

Появление языка Java вызвало в компьютерном мире большой фурор, и вам, конечно, хочется поскорее узнать, чем же этот язык столь замечателен. К концу этой главы мы с вами напишем первые несколько программ на языке Java. Наша цель сейчас - разобраться в структуре типичной программы на Java, а заодно научиться писать, компилировать и запускать программы. Это краткое введение также поможет вам понять сходства и различия между Java и другими языками программирования, которые вы, возможно, использовали раньше.

Первым нашим шагом будет установка на компьютер компилятора и оболочки времени выполнения языка Java. Установленное программное обеспечение мы протестируем самым простым и очевидным способом - написав и выполнив программу на Java. Затем мы изучим структуру Java-программ и то, как происходит их выполнение. В заключение мы рассмотрим основные понятия, относящиеся к апплетам, и научимся помещать готовые апплеты на World Wide Web, чтобы любой пользователь Интернет мог получить к ним доступ.

В целом эта глава содержит очень много материала по языку Java. Однако не беспокойтесь, если вы не найдете здесь ответы на какие-то из ваших вопросов. Разработке и освоению материала, представленного в этой главе, посвящены все последующие главы - вплоть до главы 5, "Апплет в работе". В наших ближайших планах - написать несколько простых программ на Java и начать освоение этого замечательного языка.

Где найти файлы с примерами

Заголовок "Пример" над фрагментом текста программы в этой книге означает, что мы подготовили файл, который поможет вам быстрее прогнать пример на своем компьютере. Пользователи Windows 95 и Macintosh найдут файлы на прилагаемом к книге диске CD-ROM, а пользователи UNIX смогут получить файлы с примерами с помощью страницы в WWW,

озаглавленной Online Companion и расположенной по адресу http://www.vmedia.com/java.html (на этой странице собраны ссылки на файлы с примерами).

Первые шаги

Решив начать программировать на языке Java, вы первым делом должны установить на свой компьютер компилятор и оболочку времени выполнения для этого языка. Эти компоненты входят в состав комплекта разработчика Java (Java Developers Kit, JDK) - пакета программ, который бесплатно распространяется фирмой Sun Microsystems. Версию 1.01 JDK вы найдете либо на прилагаемом к книге диске CD-ROM (для пользователей Macintosh, Windows 95 и Windows NT), либо на странице Online Companion (для пользователей UNIX). Новые версии JDK, по мере их появления, мы также будем делать доступными через Online Companion, поэтому вам имеет

www.books-shop.com

смысл проверить, какую версию можно взять с Online Companion, прежде чем приступать к инсталляции с прилагаемого к книге диска.

Оболочки для программирования на Java третьих фирм

Многие фирмы - поставщики программного обеспечения (в частности, Borland и Symantec) в настоящее время заняты разработкой своих оболочек для программирования на Java. Все эти фирмы планируют включить в состав своих оболочек графический интерфейс пользователя, который сделает эти оболочки более удобными в использовании в сравнении с JDK. Разумеется, все эти продукты уже не будут бесплатными. Чтобы не сужать круг читателей, мы в этой книге решили ограничиться описанием только JDK фирмы Sun. Когда новые оболочки программирования для языка Java будут появляться на рынке, мы будем помещать краткие рецензии на них на странице Online Companion.

Выбрав источник инсталляции - прилагаемый к книге диск или Интернет, - вы должны перенести содержимое JDK в свою файловую систему. При установке с CD-ROM эта работа сводится к копированию файлов на жесткий диск, а выбрав в качестве источника установки Интернет, вы должны будете скачать файл с дистрибутивом JDK из сети и разархивировать его. Информацию о том, как это сделать на конкретной компьютерной платформе, вы найдете в одном из двух приложений - Приложении А, "О странице Online Companion", или Приложении Б, "Диск CD-ROM". Перенеся файлы JDK на свой компьютер, вы можете приступать к установке. В следующих разделах собраны подробные инструкции по установке JDK для каждой из платформ, для которых существует версия Набора разработчика. По мере появления версий для других платформ инструкции по установке для них мы также поместим на страницу Online Companion.

Инсталляция для Windows 95/Windows NT

Прежде чем следовать нижеприведенным инструкциям, вы должны поместить все файлы JDK на свой жесткий диск, скопировав их с диска CD-ROM. Поместить эти файлы можно в любой каталог. Находясь в этом же каталоге, вы должны установить значение переменной окружения CLASSPATH, которая позволит компилятору Java найти вспомогательные классы, нужные ему для компиляции Java-программ. Например, если вы поместили файлы дистрибутива в каталог C:\JAVA, вы должны установить переменную CLASSPATH, напечатав следующую команду в строке приглашения DOS:

C: SET CLASSPATH=.;C:\JAVA\LIB

Эту команду имеет смысл поместить в файл AUTOEXEC.BAT. Кроме того, вам, вероятно, покажется удобным добавить каталог с исполняемыми файлами JDK в путь поиска, задаваемый командой PATH. Если вы установили JDK в каталог C:\JAVA, то все исполняемые файлы будут помещены в каталог C:\JAVA\BIN, который и нужно будет добавить к списку каталогов команды

PATH в файле AUTOEXEC.BAT.

Установив значения переменных окружения, вы можете приступать к программированию на языке Java. Первое, что вам понадобится для этого, - текстовый редактор. Практически единственное требование к текстовому редактору для написания программ - это возможность сохранять файлы в простом текстовом формате и с расширением .java. Желательно также, чтобы выбранный вами текстовый редактор был достаточно быстрым, в то время как, например, возможности оформления текста различными шрифтами совсем не обязательны. К примеру, Microsoft Word 7.0 лучшим выбором для программиста никак не назовешь. Идеальный текстовый редактор позволит вам также осуществлять простейшую проверку синтаксиса (например, парность скобок) одновременно с вводом текста программы. Если у вас установлена одна из оболочек для программирования на С/С++, вы можете попробовать использовать встроенный текстовый редактор этой системы.

Power PC Macintosh

Как только вы разархивируете файлы JDK на вашей файловой системе, Набор разработчика будет готов к работе. Обращайтесь к Приложениям А и Б за инструкциями по копированию файлов с диска CD-ROM или скачиванию файлов со страницы Online Companion и их разархивированию. Версия JDK для Macintosh, которую вы найдете на прилагаемом к книге диске, может использоваться только для создания апплетов. Если вы помните, в первой главе мы говорили о том, что Java-программы выполняются в рамках так называемой виртуальной машины, а виртуальная машина для запуска апплетов отличается тем, что она изолирует их и не позволяет им причинить какой-либо вред компьютеру. К моменту сдачи этой книги в типографию для компьютеров Macintosh существовала версия только такой виртуальной машины, которая поддерживает апплеты. Это означает, что вам понадобится программа просмотра апплетов

www.books-shop.com

(appletviewer) для запуска многих простых программ, которые иллюстрируют в этой главе принципы языка Java. Для запуска этих программ вы должны сделать следующее:

1.Щелкните по значку программы просмотра апплетов на верхнем уровне разархивированного JDK.

2.Щелкните мышью по файлу index.html. Это приведет к запуску апплета под названием ProgramRunnerApplet.java, который, в свою очередь, позволит вам запускать простые программы, как если бы вы управляли ими из командной строки на компьютере с Windows

или UNIX.

Конечно, рано или поздно у вас появится возможность запускать самостоятельные Javaпрограммы на компьютере Macintosh. Но пока, чтобы познакомиться с приводимыми здесь примерами, вам придется пользоваться программой просмотра апплетов.

Однако прежде чем запускать Java-программы, вы должны иметь возможность вводить их текст. Для этого вам понадобится текстовый редактор, который обязательно должен уметь сохранять файлы в простом текстовом формате. Очень полезной будет также возможность производить несложную проверку синтаксиса одновременно с вводом программного кода. Если у вас на компьютере уже установлена одна из оболочек программирования для С++, вы можете использовать встроенный в нее текстовый редактор для ввода Java-программ.

UNIX

Прежде чем приступать к выполнению нижеприведенных инструкций, поместите все файлы, входящие в JDK, на свой жесткий диск. Для этого вам нужно будет скачать дистрибутив JDK со страницы Online Companion (о том, как это сделать, вы прочтете в Приложении А).

На жестком диске вы можете поместить файлы JDK в любой каталог. Находясь в этом же каталоге, вы должны установить переменную окружения CLASSPATH, которая позволит компилятору Java находить вспомогательные классы, которые нужны ему для компиляции Javaпрограмм. Предположим, что вы поместили файлы дистрибутива в каталог /usr/local/java. Затем, находясь в строке приглашения оболочки, вы должны установить значение переменной CLASSPATH. Команды для различных оболочек UNIX, позволяющие сделать это, перечислены в табл. 2-1 (вы можете добавить эту команду в свой файл .login).

Таблица 2-1. Установка значения переменной окружения CLASSPATH

Оболочка

Команда

C shell

promptsetenv CLASSPATH /usr/local/java:.

Bourne shell promptCLASSPATH=/usr/local/java:.

 

promptexport CLASSPATH

Korn shell

promptexport CLASSPATH=/usr/local/java:.

bash

promptexport CLASSPATH=/usr/local/java:.

Вам, вероятно, покажется удобным добавить каталог с исполняемыми файлами Набора разработчика в путь поиска. Если вы установили JDK в каталог /usr/local/java, то все исполняемые файлы будут помещены в каталог /usr/local/java/bin, который и нужно будет добавить к списку каталогов пути поиска в файле .login.

Следующий шаг - выбор текстового редактора. На эту роль подойдут такие распространенные редакторы, как Emacs, vi или pico.

Первая программа на Java

Теперь нам предстоит проверить работоспособность установленного программного обеспечения. Текст примера 2-1, как и всех остальных примеров в этой книге, вы найдете на диске CD-ROM и на странице Online Companion (см. врезку "Где найти файлы с примерами"). Пользователи Macintosh должны загрузить в программу просмотра апплетов файл

/Chapter2/Example1/appleProgram.html с диска CD-ROM. Если ваш компьютер - не Macintosh, вам лучше ввести этот первый пример самостоятельно, чтобы вы могли заодно опробовать в работе свой текстовый редактор.

СОВЕТ Пользователи Macintosh должны будут прибегнуть к помощи текстового редактора позднее, в следующих разделах этой главы.

www.books-shop.com

Пример 2-1. Простейшая программа "Hello, Java!" (OurPrimaryClass.java). import java.util.*;

public class OurPrimaryClass {

public final static void main(String S[]) { System.out.println("Hello, Java!"); Date d=new Date();

System.out.println("Date: "+d.toString());

}

}

Введя текст этого маленького примера, сохраните его в файле OurPrimaryClass.java. Каждый раз, когда вы определяете общедоступный класс, вы должны сохранять его в файле, имя которого совпадает с именем класса (подробнее о том, что такое общедоступный класс, мы поговорим ниже). Прежде всего мы должны скомпилировать нашу программу с помощью компилятора Java, который называется javac. Пользователи UNIX и Windows для этого должны ввести в командной строке следующую команду:

javac OurPrimaryClass.java

Пользователям Macintosh достаточно щелкнуть по значку компилятора Java, а затем открыть файл OurPrimaryClass.java для компиляции.

Если компилятор обнаружит ошибки, проверьте правильность ввода текста программы (или просто возьмите готовый файл с прилагаемого диска или из Интернет со страницы Online Companion). Если вы по-прежнему не можете довести компиляцию до успешного конца, проверьте, выполняются ли следующие условия:

Ваша система знает, где находится javac. На компьютерах с UNIX или Windows компилятор javac должен для этого находиться в каталоге, включенном в путь поиска (пользователи Macintosh могут об этом не беспокоиться).

Компилятор javac должен быть в состоянии найти остальные файлы, входящие в JDK. На компьютерах с UNIX и Windows должно быть правильно установлено значение переменной окружения CLASSPATH (см. выше; пользователи Macintosh могут об этом не беспокоиться).

Если же компиляция прошла успешно, вы можете переходить к запуску программы. Пользователи UNIX и Windows должны для этого ввести следующую команду:

java OurPrimaryClass

Эта команда запускает оболочку времени выполнения, которая так и называется - java. Эта оболочка загружает класс OurPrimaryClass и выполняет входящий в него метод main. Вывод программы выглядит следующим образом:

Hello, Java!

после чего следует текущая дата. Если вместо описанного вывода вы получаете сообщение об ошибке, то, вероятнее всего, оболочка времени выполнения не может найти файл OurPrimaryClass.class, который был сгенерирован компилятором javac. В этом случае пользователи UNIX и Windows должны убедиться, что в значение переменной CLASSPATH входит текущий каталог. Пользователи Macintosh должны запускать этот пример в качестве апплета, как описано выше.

Разбор параметров в командной строке

Если только вы не пользуетесь компьютером Macintosh для писания программ на Java, вы можете также передать нашей простейшей программе какие-нибудь параметры в командной строке. Для этого нужно воспользоваться переменной - массивом строк, которую мы объявим как String S[] и в элементах которой будут содержаться отдельные параметры. Вот как выглядит вариант метода main, который печатает на выходе все, что передается ему в командной строке.

Пример 2-2. Метод main, осуществляющий разбор командной строки. public class PrintCommandLineParameters {

public final static void main(String S[] ) { System.out.println("Hello, Java!"); System.out.println("Here is what was passed to me:"); for(int i=0;i.length;i++)

System.out.println(S[i]);

}

www.books-shop.com

}

Наша программа теперь будет печатать на выходе все переданные ей параметры командной строки. Например, если вы запустите эту программу такой командой:

java PrintCommandLineParameters parameter1 parameter2 parameter3 parameter4

то на выходе вы получите следующее:

Hello, Java!

Here is what was passed to me: parameter1

parameter2

parameter3

parameter4

СОВЕТ Метод main аналогичен функции main, которая должна присутствовать в любой программе на С или С++.

Простой текстовый вывод

Как вы уже, вероятно, догадались, метод System.out.println позволяет выводить текст на экран. Этот метод очень удобен для текстового вывода в несложных программах вроде тех, с которыми мы сейчас работаем. Когда мы с вами перейдем к созданию апплетов, мы должны будем научиться выводить графическую, а не только текстовую информацию. А сейчас давайте познакомимся поближе со свойствами метода System.out.println.

Как вы уже видели, если передать методу System.out.println строку символов, заключенную в пару двойных кавычек, этот метод выведет данную строку на экран, завершив ее переводом строки. Кроме того, этот метод можно использовать для печати значений переменных - как по отдельности, так и совместно со строками символов в кавычках.

Пример 2-3. Использование метода System.out.println. public class PrintlnExample {

public static void main(String ARGV[]) { System.out.println("This example demonstrates the use"); System.out.println("of System.out.println"); System.out.println("\nYou can output variables values"); System.out.println("like the value of an integer:\n"); int i=4;

System.out.println("variable i="+i); System.out.println(i);

}

}

Как устроена Java-программа

Мы с вами только что написали простую программу на языке Java. Давайте воспользуемся этой программой, чтобы уяснить, из каких основных строительных блоков состоят Java-программы. Наша программа содержит не все из этих блоков, поэтому мы сейчас приступим к ее расширению и усложнению, чтобы задействовать в нашей программе большинство элементов, которые применяются во всех Java-программах.

Впрочем, не ждите, что, прочитав следующие несколько страниц, вы уже будете понимать основы этого языка. Объектно-ориентированные свойства языка Java рассматриваются в следующей главе, а формальный синтаксис языка обсуждается в главе 4. Цель же этой главы - помочь вам понять, что представляет собой Java-программа в целом. При этом важно помнить, что все программы, которые мы будем рассматривать в этом разделе, не относятся к апплетам. (Простейший апплет, выводящий надпись "Hello, Applet!", мы с вами напишем ближе к концу этой главы.) Тем не менее почти все, о чем мы здесь будем говорить, в равной мере относится и к апплетам, которые представляют собой полноправные Java-программы - пусть и запускаемые не из командной строки, а на Web-странице.

Обзор структуры Java-программы

www.books-shop.com

Все Java-программы содержат в себе четыре основные разновидности строительных блоков:

классы (classes), методы (methods), переменные (variables) и пакеты (packages). На каком бы языке вы ни программировали до сих пор, вы скорее всего уже хорошо знакомы с методами, которые есть не что иное, как функции или подпрограммы, и с переменными, в которых хранятся данные. С другой стороны, классы представляют собой фундамент объектно-ориентированных свойств языка. Пока что для простоты можно сказать, что класс - это некое целое, содержащее в себе переменные и методы. Наконец, пакеты содержат в себе классы и помогают компилятору найти те классы, которые нужны ему для компиляции пользовательской программы. Как мы увидим в главе 3, "Объектная ориентация в Java", классы, входящие в один пакет, особым образом зависят друг от друга. Однако пока, опять-таки для простоты, мы можем рассматривать пакеты просто как наборы классов. Даже простейшая программа, которую мы написали, чтобы протестировать установленный JDK, содержит в себе все эти составные части.

Все, о чем мы сейчас говорили, присутствует в любой Java-программе. Однако Java-программы могут включать в себя составные части и других видов, о которых мы сейчас подробно говорить не будем. Некоторые сведения об этих разновидностях составных частей приведены в табл. 2-2. Все, что описано в этой таблице, не обязательно требуется для каждой Java-программы, однако во многих программах из тех, которые мы будем писать, без этих составных частей будет не обойтись.

 

Таблица 2-2. Базовые понятия языка Java, не обсуждаемые в этой главе

Понятие

Для чего используется

Где в книге описывается

Интерфейсы Позволяют реализовать полиморфизм

Полиморфизм и интерфейсы

 

 

обсуждаются в главе 3

Исключения Позволяют организовать эффективную

Глава 4

 

обработку ошибок

 

Потоки Позволяют одновременно выполнять больше

Вводятся в главе 5, а подробно

 

одного фрагмента кода

обсуждаются в главе 10

Java-программа может содержать в себе любое количество классов, но один из этих классов всегда имеет особый статус и непосредственно взаимодействует с оболочкой времени выполнения. В качестве такого особого класса оболочка времени выполнения всегда воспринимает первый из классов, определенных в тексте программы. Мы будем называть этот класс первичным классом (primary class). В примере 2-1 первичным классом был OurPrimaryClass. В первичном классе обязательно должны быть определены один или несколько специальных методов.

Когда программа запускается из командной строки, как мы делали это с примером 2-1, системе требуется только один специальный метод, который должен присутствовать в первичном классе, - метод main. Ниже, когда мы приступим к программированию апплетов, мы увидим, что первичный класс в апплете должен содержать уже несколько таких специальных методов.

Теперь мы перейдем к подробному рассмотрению каждого из четырех основных блоков Javaпрограммы - переменных, методов, классов и пакетов.

Переменные

Видимо, понятие переменной не требует слишком подробных объяснений; удобнее всего представлять себе переменную как хранилище для единицы данных, имеющее собственное имя. Любая переменная в языке Java, как и в большинстве других языков программирования, принадлежит к определенному типу. Тип переменной определяет, какого рода информацию можно в ней хранить. Например, переменные типа int используются для хранения целочисленных значений. Приведем пример использования переменной этого типа.

Пример 2-4. Использование переменной. public class UsesInt {

public static void main(String S[]) { int i=4;

System.out.println("Value of i="+i);

}

}

В этом примере мы использовали знак операции присваивания = для того, чтобы присвоить переменной i значение 4, а затем вывели значение этой переменной с помощью метода System.out.println. Тип переменной, который мы использовали в данном примере, относится к одной из двух больших групп типов, используемых в Java, - к примитивным типам (primitive

www.books-shop.com