Чтение онлайн

на главную - закладки

Жанры

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

Сухов С. А.

Шрифт:
9.1. Основы механизма исключений

К механизму обработки исключений в Java имеют отношение 5 ключевых слов: — try, catch, throw, throws и finally. Схема работы этого механизма следующая. Вы пытаетесь (try) выполнить блок кода, и, если при этом возникает ошибка, система возбуждает (throw) исключение, которое в зависимости от его типа вы можете перехватить (catch) или передать умалчиваемому (finally) обработчику.

Ниже приведена общая форма блока обработки исключений.

try {

// блок кода}

catch (ТипИсключения1
е) {

// обработчик исключений типа ТипИсключения1 }

catch (ТипИсюпочения2 е) {

// обработчик исключений типа ТипИсключения2

throw(e) // повторное возбуждение исключения }

finally { }

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

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

9.3. Неперехваченные исключения

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

class Ехс0 {

public static void main(string args[]) {

int d = 0;

int a = 42 / d;

}

}

Вот вывод, полученный при запуске нашего примера.

C:\>javaExc0

java.lang. ArithmeticException: / деление на ноль

at Exc0.main(Exc0.java:4)

Обратите внимание на тот факт, что типом возбужденного исключения был не Exception и не Throwable. Это подкласс класса Exception, а именно: ArithmeticException, поясняющий, какая ошибка возникла при выполнении программы. Вот другая версия того же класса, в которой возникает та же исключительная ситуация, но на этот раз не в программном коде метода main.

class Exc1 {

static void subroutine {

int d = 0;

int a= 10 / d;

}

public static void main(String args[]) {

Exc1 .subroutine;

}

}

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

С:\> java Excl

java.lang.ArithmeticException: / деление на ноль

at Excl.subroutine(Excl.java:4)

at Excl.main(Excl.java:7)

9.4.
Операторы try и catch

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

class Ехс2 {

public static void main(String args[]) {

try {

int d = 0;

int a = 42 / d;

}

catch (ArithmeticException e) {

System.out.println("деление на ноль");

}

}

}

Целью большинства хорошо сконструированных catch-разделов должна быть обработка возникшей исключительной ситуации и приведение переменных программы в некоторое разумное состояние — такое, чтобы программу можно было продолжить, будто никакой ошибки и не было (в нашем примере выводится предупреждение - «деление на ноль»).

9.5. Несколько разделов catch

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

class MultiCatch {

public static void main(String args[]) {

try {

int a = args.length;

System.out.println("a = " + a);

int b = 42 / a;

int c[] = { 1 };

c[42] = 99;

}

catch (ArithmeticException e) {

System.out.println("деление на ноль: " + e);

}

catch(ArrayIndexOutOfBoundsException e) {

System.out.println("неправильный индекс массива: " + e);

}

}

Этот пример, запущенный без параметров, вызывает возбуждение исключительной ситуации деления на ноль. Если же мы зададим в командной строке один или несколько параметров, тем самым установив переменную «а» в значение больше нуля, наш пример выполнит оператор деления, но в следующем операторе будет возбуждено исключение выхода индекса за границы массива ArraylndexOutOfBounds. Ниже приведены результаты работы этой программы, запущенной и тем и другим способом.

Поделиться:
Популярные книги

Егерь. Прилив. Книга 10

Скиба Николай
10. Зверолов
Фантастика:
рпг
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Егерь. Прилив. Книга 10

"Стоящие свыше"+ Отдельные романы. Компиляция. Книги 1-19

Денисова Ольга
Фантастика:
фэнтези
городское фэнтези
готический роман
5.00
рейтинг книги
Стоящие свыше+ Отдельные романы. Компиляция. Книги 1-19

Том 7. Пьесы 1873-1876

Островский Александр Николаевич
7. Собрание сочинений в шестнадцати томах
Поэзия:
драматургия
5.00
рейтинг книги
Том 7. Пьесы 1873-1876

Бояръ-Аниме. Газлайтер. Том 34

Володин Григорий Григорьевич
34. История Телепата
Фантастика:
фэнтези
боевая фантастика
аниме
7.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 34

Ореховый посох

Скотт Роберт
1. Eldarn Trilogy
Фантастика:
фэнтези
6.25
рейтинг книги
Ореховый посох

Шайтан Иван 6

Тен Эдуард
6. Шайтан Иван
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
7.43
рейтинг книги
Шайтан Иван 6

Хроники странного королевства. Двойной след (Дилогия)

Панкеева Оксана Петровна
79. В одном томе
Фантастика:
фэнтези
9.29
рейтинг книги
Хроники странного королевства. Двойной след (Дилогия)

Корабль судьбы. Том 2

Хобб Робин
3. Сага о живых кораблях
Фантастика:
фэнтези
9.15
рейтинг книги
Корабль судьбы. Том 2

Точка Бифуркации VI

Смит Дейлор
6. ТБ
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Точка Бифуркации VI

Вечный. Книга II

Рокотов Алексей
2. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга II

Егерь. Столичный гамбит

Скиба Николай
4. Зверолов
Фантастика:
рпг
уся
фэнтези
фантастика: прочее
попаданцы
6.67
рейтинг книги
Егерь. Столичный гамбит

Аальхарнская трилогия. Трилогия

Петровичева Лариса
Фантастика:
фэнтези
7.87
рейтинг книги
Аальхарнская трилогия. Трилогия

Суть науки Каббала. Том 1.

Лайтман Михаэль Семенович
Научно-образовательная:
прочая научная литература
религиоведение
5.00
рейтинг книги
Суть науки Каббала. Том 1.

Утерянные победы

фон Манштейн Эрих
След в истории
Документальная литература:
биографии и мемуары
5.75
рейтинг книги
Утерянные победы