Исключительные ситуации.

Методы.

Массивы.

Работа с массивами в Java существенно отличается от C/C++. Основное отличие со­стоит в том, что массив по сути представляет собой объект. Поэтому, для того чтобы создать массив, надо не только объявить переменную, но и выполнить оператор new.

Переменная, содержащая ссылку на массив, объявляется следующим образом:

тип имя_переменной [];

Как и при объявлении обычной переменной, перед определением типа могут быть указаны модификаторы static, final, public и т. д.

Для создания массива используется следующее выражение:

имя_переменной=new тип [размер];

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

Методы Java почти не отличаются от функций-членов C. Объявление метода вы­глядит следующим образом:

[модификаторы] возвращаемое_значение имя_метода ([список_параметров]) [throws список_исключений]

{

тело_метода

}

Назначение некоторых модификаторов описано ниже.

· Модификатор типа доступа определяет, из каких классов может производиться обращение к методу. Как и в случае переменных, на первых этапах изучения языка вам достаточно запомнить модификатор public, допускающий вызов ме­тода из-за пределов пакета.

· Модификатор static определяет метод класса, или статический метод. В отли­чие от метода экземпляра, метод класса можно вызвать, даже если ни один эк­земпляр данного класса не был создан.

· Модификатор abstract определяет абстрактный метод. Абстрактный метод дол­жен обязательно быть переопределен в подклассе данного класса. Класс, со­держащий хотя бы один абстрактный метод, является абстрактным классом; эк­земпляр такого класса не может быть создан.

В определении метода может присутствовать ключевое слово throws, сопровождае­мое списком исключений. Исключения, или исключительные ситуации — чрезвычайно важный механизм, не владея которым практически невозможно построить приложе­ние или апплет, выполняющие полезные действия.

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

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

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

Фрагменты кода, которые могут генерировать исключительные ситуации, следует поместить в блок try следующего формата:

try

{

Последовательность команд

}

Непосредственно за блоком try должен размещаться как минимум один блок catch, который выглядит так:

catch (описание_исключения)

{

Команды обработки исключительной ситуации

}

При нормальной работе программы наличие блока try никак не сказывается на её выполнении. По завершении фрагмента, предшествующего блоку try, управление пе­редается внутрь блока, а после того как все команды внутри блока будут выполнены, управление перейдет к первой команде, следующей после блока catch.

Для каждой категории исключительных ситуаций предусмотрен специальный класс, содержащий описания исключений. Так, например, арифметические ошибки описываются классом ArithmeticException, некорректная попытка создания объекта URL - классом с названием MalformedURLException и т. д.

Классы, которые описывают интересующие нас исключительные ситуации, явля­ются подклассами класса Exception. Класс Exception, в свою очередь, является под­классом класса Throwable.

Иерархическая структура, включающая некоторые (очень немногие) классы, опи­сывающие исключительные ситуации, представлена ниже.

Exception

!

!-- IOException

! !

! !-- MalformedURLException

! !

! !-- UnknownHostException

! …

!

!-- RuntimeException

!

!-- ArithmeticException

!

Рассмотрим блок try, содержащий несколько команд, и блоки catch, предназна­ченные для обработки исключительных ситуаций.

try

{

sock=new Socket (www.myserver.com, 80};

a=b/d;

}

catch (UnknownHostException ex)

{

Обработка исключительной ситуации UnknownHostException

}

catch (IOException ex)

{

Обработка исключительной ситуации IOException

}

catch (ArithmeticException ex)

{

Обработка исключительной ситуации ArithmeticException

}

За блоком try следуют три блока catch. Конструктор класса Socket, вызываемый в блоке try, может генерировать исключения UnknownHostException и IOException, а при делении b/d, если значение d будет равно нулю, возникнет исключительная ситуация ArithmeticException. Каждое из этих исключений обрабатывается отдельным блоком catch.

Однако код программы можно существенно сократить. Три блока catch можно за­менить одним блоком, представленным ниже.

catch (Exception ex)

{

Обработка исключительных ситуаций всех типов

}

Если при выполнении метода может возникнуть исключительная ситуация, кото­рая не обрабатывается в теле метода, необходимо специально оговорить это в тексте программы. При объявлении такого метода следует указать ключевое слово throws, со­провождаемое перечнем имён классов, описывающих исключительные ситуации, ко­торые могут возникнуть при работе метода.

Простейшее Java-приложение.

Сейчас мы рассмотрим исходный код и процедуру построения простейшего Java-приложения. Текст программы, действия которой ограничиваются выводом крат­кого сообщения, приведён ниже.

import java.lang.*;

class FirstApplication

{

public static void main (String args [])

{

System.out.println (“Моё первое Java-приложение”);

}

}

Рассмотрим исходный текст приложения. Первая строка исходного кода импортирует пакет java.lang, кото­рому принадлежит класс System, используемый в работе приложения.

Рассмотрим метод main (). В его объявлении указаны модификаторы public и static. Модификатор public позволяет вызывать метод из-за пределов текущего па­кета. Модификатор static объявляет main () как статический метод. Это необходимо, так как при вызове main () ни одного экземпляра класса FirstApplication ещё не су­ществует.

При вызове метода main () ему передастся массив строковых значений, в котором содержатся параметры, заданные в командной строке. В нашем примере обработка параметров не предусмотрена.

Единственная команда, содержащаяся в теле метода, выводит на экран строку тек­ста. Последовательность имен System.out.println означает следующее. В классе System определена переменная класса, или статическая переменная out. Она ссылается на эк­земпляр класса PrintStream, реализующий выходной поток. В классе PrintStream определён метод println (), который выводит на экран строку символов, переданную ему в качестве параметра, и дополнительно выводит символ перевода строки.

Зная теперь, как работает данное приложение, поговорим о том, что надо сделать, чтобы запустить его на выполнение. Начнем с выбора инструментальных средств.

В настоящее время разработчику предлагаются самые разнообразные инструмен­тальные пакеты, в том числе визуальные средства разработки программ. Выбор кон­кретного пакета — дело вкуса каждого специалиста. Однако среди всего набора дос­тупных средств разработки есть пакет JDK (Java Development Kit — инструментальный пакет разработки Java-программ), выполняющий роль стандарта. Байтовый код Java-программы подготав­ливается с помощью компилятора, а выполняется под управлением интерпретатора.

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

javac FirstApplication.java

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

По окончании работы компилятор создаст байтовый код программы и поместит его в файл с именем FirstApplication.class. При выборе имени для файла с байтовым кодом учитывается не имя исходного файла, а имя класса. Если вы поместите исход­ный код в файл с другим именем, в результате компиляции все равно будет создан файл с именем FirstApplication.class.

После завершения работы компилятора байтовый код готов к выполнению. Для запуска Java-программы необходим интерпретатор, реализующий виртуальную маши­ну Java (JVM). Средства поддержки JVM имеются в любом современном Web-браузере, однако для запуска приложения вам придется воспользоваться интерпретатором из пакета JDK и именем java. Как и javac, интерпретатор запускается из ко­мандной строки, а в качестве параметра задается имя класса, содержащего метод main (). В данном случае это класс FirstApplication.

Как и следует ожидать, в результате выполнения данного приложения на экране отобразится строка символов «Моё первое Java-приложение».