Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Java.doc
Скачиваний:
21
Добавлен:
20.04.2019
Размер:
936.45 Кб
Скачать

Import имя.Пакета1.ИмяКласса1;

Import имя.Пакета2.ИмяКласса2;

или (не рекомендуется)

Import имя.Пакета.*;

Пример.

package my.labs.lab5;

import java.io.InputStream;

import java.io.BufferedReader;

import java.io.StringReader;

...

Исключения

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

Возможные причины возникновения исключений

1. Невозможность нормального продолжения выполнения программы, обнаруженная виртуальной машиной:

– попытка выполнить недопустимую арифметическую операцию (например, попытка деления на 0);

– ошибка при загрузке программы или её части в память;

– нехватка аппаратных ресурсов (например, использование большого количества памяти);

2. Исключение создано по инициативе программы.

3. Внутренняя ошибка виртуальной машины.

Исключения представляют собой специальные объекты, которые содержат информацию о том, в каком месте программы и какая именно ошибочная ситуация произошла:

– стек исполнения (показывает вложенность вызовов методов);

– текстовая строка, описывающая ошибку;

– возможно, ссылку на связанное исключение.

Для обработки исключений в программе используется структурный оператор try … catch … finally:

try {

// ... операторы, при выполнении которых возможна ИС

}

catch (ТипИС переменная) {

// ... обработка ИС

}

// ...

finally {

// ... блок освобождения ресурсов

}

Блок try содержит команды, при выполнении которых возможно возникновение исключений

Блок catch содержит команды, выполняемые при возникновении того или иного типа исключений

Блок finally содержит команды, выполняемые независимо от наличия исключения

При возникновении исключения, оно передается для обработки ближайшему подходящему по типу блоку catch.

Если подобный блок отсутствует, исключение передается на уровень выше и т.д.

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

Пример. Обработка исключений двух типов

Особенностью языка Java является то, что программист обязан обрабатывать многие типы исключений.

Многие интегрированные среды разработки в подобных случаях позволяют автоматически сгенерировать подходящую конструкцию try … catch.

Все исключения представляют собой экземпляры класса java.lang.Throwable или его подклассов.

Эти классы принято называть классами исключений.

Стандартная библиотека классов Java содержит более 200 классов исключений.

Основные методы класса Throwable

void printStackTrace() выводит стек исполнения на экран

String getMessage() возвращает текст сообщения об ошибке

String toString() возвращает строку с описанием исключения (тип: сообщение)

Throwable getCause() возвращает ссылку на связанное исключение (если оно есть)

Базовая иерархия классов исключений

java.lang.Error описывает серьезную проблему, с которой обычное приложение не может справиться (например, LinkageError)

java.lang.VirtualMachineError описывает ошибки, возникающие при работе виртуальной машины (например, OutOfMemoryError, StackOverflowError)

java.lang.Exception описывает исключения, возможность возникновения которых может быть выявлена на этапе компиляции. В большинстве случаев источник возникновения исключений расположен за пределами приложения (например, IOException, PrinterException, SQLException)

java.lang.RuntimeException описывает исключения, источник возникновения которых расположен внутри приложения (например, ArithmeticException, IndexOutOfBoundsException, NullPointerException)

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

try {

// ...

}

catch (ArithmeticException e) {

// ...

}

catch (RuntimeException e) {

// ...

}

catch (Exception e) {

// ...

}

Методы, которые по каким-то причинам не могут или не должны обрабатывать генерируемые внутри них исключения, требуется помечать с помощью ключевого слова throws:

Тип имяМетода (параметры) throws СписокИсключений {

// тело метода

}

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

Пример. Объявление метода для копирования файлов

void copyFile(String fileFrom,String fileTo)

throws IOException {

// ...

}

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

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

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

Для генерации исключения используется оператор throw:

throw new ТипИсключения(параметры);

Пример. Определение семейного состояния

boolean isMarried(String state)

throws IllegalArgumentException {