Электронная библиотека книг Александра Фролова и Григория Фролова.
Shop2You.ru Создайте свой интернет-магазин
Библиотека
Братьев
Фроловых
[Назад]

Библиотека примеров приложений Java

Оглавление
Базовые типы

Замещающие типы
Без указателей
Массивы
Структурное программи-
рование

Обработка исключений
Возбуждение исключений
Классы обработки исключений
Блок finally
Строки String
Класс Math
Класс Vector
Класс Stack
Словарь на базе Hashtable
Словарь на базе Properties
Цифровые часы
Собственный класс
Наследование классов

Интерфейсы

Назад Вперед

1.8. Стандартные классы для обработки исключений

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

Исходный текст примера

Архив проекта для Java WorkShop 2.0

Немного теории

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

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

Для одного блока try можно определить несколько блоков catch, которые будут обрабатываться последовательно. Если возникнет исключение, то будет выполнен тот блок catch, в параметре которого это исключение объявлено. В том случае, когда ни один блок не подходит, выполняется блок с объявлением класса Exception. А если такой блок не предусмотрен, исключение будет обработано на уровне интерпретатора Java.

Описание примера

В этом примере мы разместили в одном блоке try три строки, вызывающих возникновение трех различных исключений:

int i = 0;
String szShortString = "123";
char chr;
Object ch = new Character('*');
    
try
{
  i = 5/i;
  chr = szShortString.charAt(10);
  System.out.println((Byte)ch);
}

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

Вторая строка вызывает возникновение исключение StringIndexOutOfBoundsException, так как в ней выполняется попытка адресации за пределы текстовой строки.

И, наконец, в третьей строке мы выполняем недопустимое преобразование классов, которое "наказывается" исключением ClassCastException.

Для обработки исключений в нашей программе предусмотрено три блока catch:

catch(StringIndexOutOfBoundsException ex)
{
  System.out.println(ex.toString()); 
}
catch(ArithmeticException ex)
{
  System.out.println(ex.toString()); 
}
catch(Exception ex)
{
  System.out.println(ex.toString()); 
}

Первые два из них перехватывают, соответственно, исключения ArithmeticException и StringIndexOutOfBoundsException, а третье - любые другие исключения, которые могут возникнуть. В частности, третий блок catch способен обработать исключение ClassCastException.

Если запустить программу на выполнение, она закончит свою работу с сообщением о возникновении исключения ArithmeticException:

java.lang.ArithmeticException: / by zero

Закрыв символом комментария строку, выполняющую деление на нуль, мы включим в работу блок catсh c параметром StringIndexOutOfBoundsException:

java.lang.StringIndexOutOfBoundsException: 
  String index out of range: 10

Блок catch с объявлением класса Exception получит управление после того, как мы закроем внутри блока try все строки кроме последней, выполняющей неправильное преобразование классов. Этот блок выведет на консоль следующее сообщение:

java.lang.ClassCastException: 
  java.lang.Character

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

java.lang.ClassCastException: 
  java.lang.Character
	at StdExeption.main(Compiled Code)

Из этого сообщения видно, что в методе main класса StdExeption возникло исключение ClassCastException. Оно возникло при работе с объектом класса java.lang.Character.

Назад Вперед

[Назад]