0% нашли этот документ полезным (0 голосов)
42 просмотров10 страниц

8

Урок посвящен исключениям в Java. Рассматриваются понятия исключительной ситуации, типы исключений, блоки try-catch-finally, а также ключевые слова throw и throws.

Загружено:

yslovno0
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
0% нашли этот документ полезным (0 голосов)
42 просмотров10 страниц

8

Урок посвящен исключениям в Java. Рассматриваются понятия исключительной ситуации, типы исключений, блоки try-catch-finally, а также ключевые слова throw и throws.

Загружено:

yslovno0
Авторское право
© © All Rights Reserved
Мы серьезно относимся к защите прав на контент. Если вы подозреваете, что это ваш контент, заявите об этом здесь.
Доступные форматы
Скачать в формате PDF, TXT или читать онлайн в Scribd
Вы находитесь на странице: 1/ 10

Урок № 8

Исключения

Содержание
1. Теория исключений.................................................... 3
1.1 Что такое исключительная ситуация?......................3
1.2 Типы исключений..........................................................4
1.3 Блоки try и catch.............................................................5
1.4 Ключевое слово finally..................................................8
1.5 Ключевое слово throw..................................................8
1.6 Ключевое слово throws.................................................9

2
1. Теория исключений

1. Теория исключений
1.1 Что такое исключительная ситуация?
Исключение – это ошибка, которая возникает во
время выполнения приложения.
В языке Java исключения являются объектами, ко-
торые являются наследниками Throwable. Существует
ряд стандартных исключительных ситуаций, которые
предопределены. В данном случае объекты исключений
создаются автоматически, при возникновении исклю-
чительной ситуации. Также мы можем создавать соб-
ственные исключения, если наследуем базовый класс
Exception или RuntimeException (исключим ошибки
Error).
Исключения могут возникать во многих случаях, на-
пример: передача неправильного аргумента, обращение
к объекту, который равен null, выход за пределы масси-
ва, ошибка при приведении типов (неверный формат) и
т.д.
Обработка исключительных ситуаций (exception
handling) – это механизм языков программирования,
предназначенный для описания реакции программы
на ошибки времени выполнения и другие возможные
проблемы (называемые исключениями), которые могут
возникнуть при выполнении программы и приводят к
невозможности дальнейшей отработки программой ее
базового алгоритма.

3
Урок № 8. Исключения

1.2 Типы исключений


Рассмотрим иерархию классов исключений:

Рис. 1 Иерархия исключений

В языке Java присутствуют два типа исключений:


checked и unchecked, а также – ошибки (Error), которые
следует рассматривать отдельно.
Checked исключения обязательно должны обраба-
тываться блоком catch или описываться в сигнатуре ме-
тода (рассмотрим дальше), в отличие от unchecked, кото-
рые обрабатывать не обязательно, их можно избежать
проверками. Сhecked исключения являются наследника-
ми класса Exception (исключая ветку RuntimeException).
Unchecked – это необязательные для обработки ис-
ключения, которые наследованные от RuntimeException.
Примеры исключений:
(unchecked) NullPointerException,
(checked) IOException.
NullPointerException возникает при обращении к
неинициализированной переменной. Это исключение

4
1. Теория исключений

можно предупредить, сделав проверку на null, при-


обращении к свойствам этого объекта. Исключение
IOException возникает, например при открытии файла.
Даже если файл существует, может произойти ряд при-
чин, которые нельзя предугадать, поэтому это исключе-
ние обязательно необходимо обработать.
Если во время работы приложения возникли ошибки
(Error), это означает наличие серьезных проблем. Боль-
шинство из этих ошибок влечет за собой ненормальный
ход выполнения программы. Ошибки не рекомендуется
отмечать методах посредством throws-объявления, по-
этому они также очень часто называются не проверяе-
мые (unchecked).
1.3 Блоки try и catch
Ключевое слово try используется для задания бло-
ка программного кода, который может спровоцировать
исключительную ситуацию. Сразу после блока try дол-
жен располагаться блок catch, задающий тип исключе-
ния, которого необходимо обрабатывать.
Синтаксис:
try{
<блок кода, с возможной исключительной
ситуацией>
}
catch (<тип и объект исключения, которое мы
отлавливаем>)
{ <блок кода действия, при возникновении
исключения>
}

5
Урок № 8. Исключения

Сatch можно разделить на несколько блоков для того,


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

public class Main {


static Object object;

public static void foo() {


System.out.println(object.toString());
System.out.println(1 / 0);
}

public static void main(String[] args) {


foo();
}
}

В методе foo() написан код, который вызывает два


исключения:
■■ NullPointerException – обращение к неинициализиро-
ванному объекту;
■■ ArithmeticException: / by zero – деление на ноль.
Обработаем исключения:

public static void foo() {


try {
System.out.println(object.toString());
System.out.println(1 / 0);
} catch (Exception e) {
System.out.println("Exception");
}
}

6
1. Теория исключений

Класс Exception является родителем для


NullPointerException и ArithmeticException, поэтому не-
зависимо от того, где возникнет ошибка, мы попадем в
блок catch. Следует обратить внимание, что если мы по-
лучим исключение в первой строке блока try , то дальше
мы не пойдем, поэтому мы отловим только одно исклю-
чение.

public static void foo() {


try {
System.out.println(object.toString());
System.out.println(1 / 0);
} catch (NullPointerException e) {
System.out.println("Объект равен null");
} catch (ArithmeticException e) {
System.out.println("На ноль делить нельзя");
}
}

Записав блок catch в таком виде, мы можем опреде-


лить различные действия, при том или ином исключе-
нии, но опять же, мы сможем обработать только одно
исключение; если мы хотим однозначно обработать обе
строки, тогда их следует вынести в разные блоки try:

public static void foo() {


try {
System.out.println(object.toString());
} catch (NullPointerException e) {
System.out.println("Объект равен null");
}
try {
System.out.println(1 / 0);

7
Урок № 8. Исключения

}catch (ArithmeticException e) {
System.out.println("На ноль делить нельзя");
}
}

1.4 Ключевое слово finally


Для объявления участка кода, который будет гаран-
тированно выполняться, независимо от того, какие ис-
ключения были возбуждены и перехвачены, необходи-
мо использовать блок finally.
Этот блок отработает при успешном выполнении
блока try или при обработке исключения; в обоих случа-
ях блок finally будет выполнен после try-catch и до того,
как управление перейдет к операторам, следующим по-
сле try. Блок finally очень удобен для закрытия файлов
и освобождения любых ресурсов, захваченных для вре-
менного использования в начале выполнения метода.
1.5 Ключевое слово throw
Оператор throw используется для того, чтобы про-
граммно возбудить исключение. Для того чтобы сделать
это, нужно иметь объект исключения (который можно
получить в блоке catch, либо создать с помощью опера-
тора new).
Пример:

throw new NullPointerException();

При достижении этого оператора выполнение кода


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

ственных методах, если, к примеру, входные данные не


проходят валидацию и метод может работать с ними не-
корректно.
1.6 Ключевое слово throws
Ключевое слово throws в методе явно задает те ис-
ключения, которые необходимо обработать при вызове
этого метода. Его следует применять, если метод спосо-
бен возбуждать исключения, которые он сам не обраба-
тывает.
Для определения списка исключений, которые мо-
гут возбуждаться методом, используется ключевое сло-
во throws и список исключений через запятую, пример:

public class Main {


public static char getCharFromString(String str, int
index) throws IllegalArgumentException,
IndexOutOfBoundsException {
if (index < 0)
throw new IllegalArgumentException();
return str.toCharArray()[index];
}

public static void main(String[] args) {


try {
System.out.println(getCharFromString
("hello", 20));
} catch (IllegalArgumentException e) {
System.out.println("Индекс не может
быть меньше нуля");
} catch (IndexOutOfBoundsException e) {
System.out.println("Вы вышли за пределы массива");
}
}
}

9
Урок № 8
Исключения

© Компьютерная Академия «Шаг»


www.itstep.org

Все права на охраняемые авторским правом фото-, аудио- и видеопроиз-


ведения, фрагменты которых использованы в материале, принадлежат
их законным владельцам. Фрагменты произведений используются в
иллюстративных целях в объёме, оправданном поставленной задачей,
в рамках учебного процесса и в учебных целях, в соответствии со ст.
1274 ч. 4 ГК РФ и ст. 21 и 23 Закона Украины «Про авторське право і
суміжні права». Объём и способ цитируемых произведений соответству-
ет принятым нормам, не наносит ущерба нормальному использованию
объектов авторского права и не ущемляет законные интересы автора
и правообладателей. Цитируемые фрагменты произведений на момент
использования не могут быть заменены альтернативными, не охраня-
емыми авторским правом аналогами, и как таковые соответствуют
критериям добросовестного использования и честного использования.
Все права защищены. Полное или частичное копирование материалов
запрещено. Согласование использования произведений или их фраг-
ментов производится с авторами и правообладателями. Согласованное
использование материалов возможно только при указании источника.
Ответственность за несанкционированное копирование и коммерческое
использование материалов определяется действующим законодатель-
ством Украины.

Вам также может понравиться