Home Map Index Search News Archives Links About LF
[Top Bar]
[Bottom
Bar]
[Photo of the
Author]
Хосе М. Фернандес

Написать автору


Индекс:
Вступление
Происхождение
Где найти и как установить JAVA
Среда разработки
Характеристики
Первая программа на JAVA
Подведение итогов

Java. Часть I

[Ilustration]

Аннотация: Это первая статья в серии о программировании на Java. В первой части будут даны описание Java как языка, его общие характеристики и местоположение большинства подходящих источников информации.




Вступление

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

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

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

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

Я бы хотел особо подчеркнуть, что Java является языком общего назначения, и что он не используется только для написания апплетов для веб-страничек, хотя именно это сделало его очень популярным. Мы не можем придерживаться только этого аспекта Java, так как существует много других альтернатив, которые гораздо интереснее, чем java-апплеты.

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

Происхождение

В первые 18 месяцев своей жизни в 1991 году Java разрабатывался James Gosling, Patrick Naughton, Chis Warth, Ed Frank и Mike Sherindan в Sun Microsystem Inc. В промежутке с 1992 по 1995 Bill Joy, Arthur Van Hoff, Jonathan Payne, Frank Yellia и Tim Lindolm совместно доводили до ума начальный прототип.

>По датам видно, что Java появился до или по крайней мере одновременно с WWW -- пока в 1991 году Tim Berners Lee не разработал язык HTML.

Синтаксис Java очень схож с C его объектно-ориентированные характеристики также сходны с C++. Java является логически последовательным языком программирования.

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

Интернет открыл Java и сделал его повсеместно известным языком, и одновременно Java оказал глубокий эффект на Интернет, поскольку он расширил диапазон объектов, которые можно свободно перемещать в кибер-пространстве (динамические автоматически исполняемые программы).

Где найти и как установить Java

Существует несколько средств, абсолютно необходимых для программирования на Java. Кстати, я буду иметь в виду среду GNU/LINUX (если кто не понял):

Текущая реализация для Linux, основанная на формате ELF, требует ядра 1.2.13 или более поздней версии.

Я буду использовать среду JDK (Java Development Kit), Netscape версии 2.0.14 или более поздней и текстовый редактор типа Xemacs. Мы всегда будем работать в Xwindows. Это необходимо для разработки апплетов и программ с графическим интерфейсом, хотя это и не обязательно.

Дистрибутив JDK можно загрузить со следующего веб-сайта:

http://www.blackdown.org/java-linux.html

Для более быстрой загрузки на этом же сайте можно выбрать подходящее зеркало. Несколько месяцев назад последней версией была JDK-1.1.3 (именно она используется в этой статье), но когда я последний раз там был, я видел версию 1.19. Заметьте, если мы хотим загрузить все, то придется загружать 24 МБ! Тем не менее, загрузка только самого необходимого составит 12 МБ (терпение!).

После разархивации архива с помощью gunzip можно начинать работать.

Обычно мы устанавливаем дистрибутив в каталог /usr/local, создавая подкаталог /JDK1.1.3, и там следующее:

/doc Официальная документация в формате HTML

/demo Демонстрационные программы на Java

/lib Библиотеки

/bin Здесь находятся необходимые инструменты JDK.

В каталоге /lib мы найдем файл "classes.zip" (не разворачивайте этот файл), он содержит все скомпилированные классы, которые могут использоваться JDK.

В корневом каталоге мы найдем файл "src.zip", содержащий исходные тексты к classes.zip. Их нельзя скомпилировать и они входят в дистрибутив только для информации.

Среда разработки

Как уже было сказано выше, средства разработки расположены в каталоге /bin:

javac : компилятор java, который преобразует исходный текст java в байт-коды.

Java : интерпретатор java. Исполняет байт-коды java.

jre : еще один интерпретатор, сходный с Java, но созданный для тех пользователей, которым не требуются все имеющиеся опции.

appletviewer : проверяет и запускает апплеты.

jdb : отладчик.

javap : дизассемблер байт-кодов, скомпилированных на Java.

javadoc : генератор документации, создает несколько страниц HTML, описывающих открытые и защищенные классы, интерфейсы, конструкторы, методы и поля. Также создает дерево классов и индекс всех членов.

javah : средство по добавлению собственных методов (на C) к программам Java.

jar : архивирует классы java и исходные тексты в архив Jar.

javakey : средство поддержки цифровых подписей.

updateAWT : обновляет изменившиеся имена из методов AWT1.02 в приложении.

Для спокойной работы с текущей структурой каталогов я бы посоветовал Вам добавить /usr/local/JDK1.1.3/bin к переменной окружения PATH. Если Вы хотите сделать среду разработки доступной во всей системе, то подправьте переменную PATH в файле /etc/profile.

Характеристики

Прежде чем продолжать, мы должны спросить себя: что же такое Java? Мы можем ответить так, как сказано в руководстве JDK: Java - это две вещи, язык программирования и платформа.

Как язык программирования Java является языком высокого уровня со следующими характеристиками (с некоторого момента мы будем исследовать их подробно):

  • Он прост
  • Объектно-ориентированный
  • Распределенный
  • Интерпретируемый
  • Надежный
  • Безопасный
  • Нейтрален к архитектуре системы
  • Переносимый
  • Многопоточный
  • Динамический
  • С высоким разрешением

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

Благодаря байт-кодам Java мы можем "написать единожды и исполнять везде". Мы можем компилировать Java программы на одной платформе и исполнять их на другой, совершенно иной архитектуре, которая имеет виртуальную машину Java (JVM). Например, Java программа может быть скомпилирована на платформе Windows NT и быть выполненной без всяких проблем (по крайней мере в теории) на Sun Ultra Solaris.

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

Платформа Java состоит из двух компонент:

  • Виртуальная Java-машина (JVM)
  • Интерфейс программирования приложений (API)

JVM является абстрактным компьютером, в котором могут выполняться предварительно откомпилированные Java программы. Ее старались разработана простой и маленькой, поскольку идея состояла в том, чтобы установить ее где только можно. Эта простота сделала возможным ее распространение на всех существующих платформах, тем самым предоставив для всех общий программный слой и в очень разнородных сетях (таких, как Интернет) она решает большое количество проблем с совместимостью. Как представляется, это наиболее вероятная причина для непрерывного роста этой технологии. Тем не менее, виртуальная машина не должна рассматриваться как программный слой, но, как указывает ее имя, она пытается быть полной компьютерной системой, потихоньку мы начнем наблюдать появление микросхем Java, которые поддерживают реальные машины Java, кредитные карточки, телевизионные декодеры и т.д.

Интерфейс программирования приложений Java является большой коллекцией программных компонент, которые предоставляют некоторое количество утилит, таких как графический пользовательский интерфейс (GUI). Они сгруппированы в библиотеки (Java-пакеты, если пользоваться терминологией Java). Именно благодаря этим пакетам возможно использование Java для многих приложений, помимо хорошо известных апплет для Интернета, мы можем создавать веб-сервера, например прокси-, почтовые и IRC сервера, и практически все, что мы сможем представить, связанное с Интернет.

Мы можем классифицировать пакеты API по различным группам:

  • Основные: объекты, массивы, числа, ввод и вывод, структуры данных, свойства системы, даты, время и т.д.
  • Апплеты: набор функций и утилит, используемых для создания Java-апплетов.
  • Работа с сетью: URL, TCP, UDP, сокеты, IP адресация.
  • Интернационализация: Помогает создавать коды, которые можно легко адаптировать под локальные особенности и визуализировать на родном языке.
  • Безопасность: низкий и высокий уровень, включая цифровую подпись, общественные и частные ключи, контроль доступа и сертификаты.
  • Программные компоненты: также известны как JavaBeans.
  • Базы данных: обеспечивает однородный доступ к большому числу реляционных баз данных.

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

В начале этого раздела мы упомянули, что Java обладает серией характеристик, которые мы изучим подробно:

Это просто:

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

  • Арифметические операции с указателями
  • Структуры (struct)
  • Определение типов (typedef)
  • Макросы (#define)
  • Необходимость освобождать память (free)
  • Отсутствие множественного наследования
  • Отсутствие перегрузки операторов
  • Отсутствие структур в союзах (unions)
Является объектно-ориентированным: Java был разработан с нуля, и, как следствие, его подход к объектам является чистым, полезным и прагматичным. Объектная модель Java проста и легка в использовании.
Является распределенным: Java разрабатывалась с учетом большой активности в сети Интернет. На самом деле, Java позволяет разработчикам получать доступ к информации в сети также легко, как и к локальному файлу.
Является надежным: Java является языком с сильной типизацией, это позволяет выполнять проверку типов во время компиляции. Кроме того, небольшая проверка осуществляется и в процессе исполнения. Управление памятю автоматическое, так как интерпретатор обладает автоматическим сборщиком мусора для неиспользуемых объектов. Сам Java предоставляет несколько объектно-ориентированных обработчиков исключительных ситуаций. В правильно написанном приложении все ошибки в процессе выполнения обрабатываются самой программой.
Не зависит от архитектуры: Основной целью создателей Java было "написано единожды, исполняется везде, в любой момент и всегда". Код Java компилируется лишь однажды в высокоуровневый байт-код, независящий от аппаратной части. Этот байт-код был разработан с тем, чтобы запускаться на любой машине с системой исполнения (интерпретатором), который зависит от аппаратной части.
Является безопасным:

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

  • Проверка байт-кода
  • Наличие памяти во время исполнения
  • Ограничения доступа к файлам

Хотя компилятор генерирует только правильный код, интерпретатор дополнительно проверяет его с тем, чтобы удостовериться, что код не был изменен (намеренно или нет) после компиляции. Более того, интерпретатор Java определяет наличие памяти для классов. Java можно рассматривать как одно из наиболее безопасных приложений для любой системы.

Является переносимым: Помимо основной переносимости Java, для того, чтобы реально получить независимость от архитектуры, в Java применяется стандарт переносимости: целые всегда целые, GUI состоит из абстрактной системы окон и поэтому не зависит от архитектуры (UNIX, PC, Mac).
Является интерпретируемым: Чтобы достичь одну из основных целей Java, независимость от платформы, java-компилятор создает промежуточный код (байт-код). Он может исполняться на любой системе с соответствующим интерпретатором. Эта парадигма может позволить нам немного поразмыслить о возможных проблемах с быстродействием java-приложений. Тем не менее, и из-за этой проблемы с быстродействием, создатели Java пытались сделать конструкцию байт-кодов как можно проще и как можно легче переводимой в машинные коды с тем, чтобы достичь максимально возможного быстродействия.
Является многопоточным: Написать приложения Java, которые будут надежно выполнять несколько задач одновременно, очень просто.
Является динамичным: Java компонует все модули, которые формируют приложение, во время исполнения. Это позволяет надежно и удобно компоновать код динамически.

После столь долгого "спича" (большую часть которого можно найти в официальной документации Java), можно задуматься о статусе Java в мире GNU/Linux. Ранее мы говорили о наличии JDK для Linux, который является ничем иным, как коммерческим вариантом, разработанным Sun Microsystems (хотя и свободно распространяемый).

Существуют такие средства, как компилятор GUAVAC, распространяемый по лицензии GPL, который позволяет безболезненно компилировать любой исходный текст Java. Мы также должны упомянуть о виртуальной машине, называемой KAFFE, распространяемой по лицензии Berkeley. Два последних проекта находятся на очень продвинутой стадии, хотя для законченности системы разработки им все еще требуются библиотеки классов Java от Sun (свободно распространяемые на данный момент).

Несколько недавних проектов, все еще на своей ранней стадии, нацелены на создание среды разработки для быстрых и визуальных приложений.

И наконец, я бы хотел сказать, что существует большое движение в сети, касающееся технологий Java и GNU, особенно это касается разработки свободно распространяемого полного пакета средств для Java, независимого от Sun. Мы уже должны понимать важность Java, и когда пройдет мода, я уверен, от этого что-нибудь останется (я бы даже сказал останется очень многое).

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

После рассмотрения основных характеристик языка давайте взглянем на настоящую программу. Как я уже говорил в вступлении, я хотел бы как можно дальше держаться от привычного материала, такого как пример программы hello world, вместо этого давайте начнем с программы, которая рисует квадраты с любыми заданными размерами (немного сложновато, но не слишком):

файл Cuadro.Java
class Cuadro {
public static void main (String args[]) {
        int l ,a;
        if (args.length == 2) {
            l = Integer.valueOf(args[0]).intValue();
            a = Integer.valueOf(args[1]).intValue();
         }
         else {
          l= 20;
          a= 15;
         }
          for (int i=l; i>0; i--){
            System.out.print("*");
            }
            System.out.print("\n");
            for (int i= a-2; i>0; i--){
             System.out.print("*");
               for(int j=l-2; j>0; j--) {
                  System.out.print(" ");
                  }
                  System.out.print("*\n");
                  }
                for (int i=l; i>0; i--){
                System.out.print("*");
                }
              System.out.print("\n");
           }
}

В Java имя, даваемое файлу с исходным кодом, очень важно потому, что оно определяет "единицу компиляции". Файл может содержать одно или более определений классов. Компилятор ожидает, что файл с исходными кодами имеет расширение .Java (4 символа), чего некоторые системы не поддерживают (DOS или Windows 3.1)

В приведенном примере имя определенного класса совпадает с именем файла с исходным кодом. Это не совпадение, в Java весь код должен содержаться в классе. По соглашению, имя класса должно совпадать с именем файла с исходным кодом, содержащим класс.. Более того, Java учитывает регистр (верхний или нижний).

Для компиляции примера в командной строке напечатайте:

> javac Cuadro.java

Компилятор Java (если все прошло нормально), создаст файл Cuadro.class, который обычно является бинарным (байт-кодами) и может быть немедленно выполнен интерпретатором:

> java Cuadro

Когда компилируется исходный код java, каждый класс размещается в архиве с именем класса. Поэтому считается хорошим тоном давать файлам с исходным кодом имена классов, содержащихся в них, с тем, чтобы имя файла с исходным кодом совпадало с файлом archive.class.

Несмотря на простоту нашего примера, Cuadro.java, он помогает нам понять фундаментальные понятия Java и, в частности, структу обычной java-программы.

Прежде всего, учтем, что этот пример не является апплетом, который может быть включен в файл HTML, а независимой программой, которую должен исполнять java-интерпретатор в командной строке.

Первая строка программы:

class Cuadro {

Первое слово является зарезервированным token языка, оно указывает на определение нового класса с названием, в данном случае, "Cuadro" -- квадратный по-испански -- Точное определение класса, включая всех его членов, заключено в двух фигурных скобках {}. Заметьте, что в Java вся деятельность программ заключена внутри класса.

В следующей строке:

public static void main (String args[]) {

она объявляет метод с именем main(). Все приложения Java начинают свое выполнение с метода с именем main() (как в C/C++). Далее, позвольте мне прокомментировать некоторые детали, необходимые для понимания этого примера (в более поздних статьях мы объясним их более подробно).

Ключевое слово public управляет областью видимости методов-членов класса. Если класс объявлен как public, то класс может быть использован кодом, определенным вне класса. Ключевое слово static вынуждает метод main() выполняться без инициализации класса. Void указывает, что этот метод ничего не возвращает. Для передачи параметров функции или методу можно использовать круглые скобки после имени функции, в нашем примере main принимает в качестве параметра массив величин класса String.

Очевидно, что весь код, принадлежащий методу, также заключен в фигурные скобки. Далее, в строке:

 int l, a ;

мы объявляем две целые переменные. В Java каждая переменная должна быть объявлена до того, как ее можно будет использовать. Заметьте, каждый оператор в коде заканчивается точкой с запятой ";".

Остальная часть кода реализует небольшой алгоритм, который:

  1. Проверяет, было ли передано необходимое количество аргументов
    If (args.length==2)
    
  2. Если аргументы были переданы, то они присваиваются целым переменным:
      l = Integer.valueOf(args[0]).intValue();
      a = Integer.valueOf(args[1]).intValue();
    
  3. Иначе переменные инициализируются значениями по умолчанию:
      l = 20;
      a = 15;
    
  4. Остальная часть программы ничто иное, как последовательность команд, необходимых для рисования квадрата на экране. Мы можем специально указать на:
    System.out.print()
    

    где print() печатает строку, переданную в качестве аргумента. System является предопределенным классом, который дает доступ к системе и out является выходным потоком, подключенным к консоли. Также,

    for (int i=l; i>0; i--)
    

    Как и ожидалось, поведение этого цикла то же, что и подсказывает нам наш опыт из C/C++ и других языков.

Прекрасное домашнее задание читателю - используя этот код, проверьте, как он будет компилироваться и исполняться, а также проверьте переносимость кода, запустите откомпилированный объект Cuadro.class на различных платформах: Linux, windows 95 (только не считайте это подарком!) и посмотрите, работает ли он одинаково на всех платформах.

Подведение итогов

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

В каждой статье я давать ссылки на печатные издания и URL, на базе которых я создал эту серию статей.

  • Руководство по JAVA. Patrick Naughton Herbert Schildt. McGraw-Hill.
  • Программирование на JAVA. Tim Ritchey. Prentice Hall.
  • Tutorial de Java . Руководство на испанском в формате HTML, которое можно взять на www.fie.us.es/info/internet/JAVA. Agustín Froufe.
  • Учебное пособие по Java. Руководство на английском в формате HTML www.javasoft.com. Sun.
  • Учебное пособие из дистрибутива JDK.

Translated by Miguel A Sepulveda

Перевод на русский: Владимир Попов


This website is maintained by Miguel Angel Sepulveda
© Jose M. Fernandez 1998
LinuxFocus 1998