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

Обработка иключений.

В Java , обработка ошибок осуществляется путем перехвата исключительных ситуаций. Возникновение ошибки влечет за собой создание в программе объекта специального типа Throwable (это суперкласс всех исключительных ситуаций ) . При этом , нормальных ход потока управления прекращается и управление передается обработчику исключений. Если программист не предусмотрел перехват исключительных ситуаций , то их перехватывает обработчик по умолчанию. Он просто выводит на консоль информацию о возникшем исключении (типе и месте возникновения) и прерывет выполнение программы. Можно сделать предположение о том , что пользователи программ чувствовали бы себя , не совсем комфортно , если бы при малейшей ошибке программа прекращала свою работу. Для решения данной проблемы пишутся собственные обработчики исключительных ситуаций . Есть несколько вариантов обработки исключительной ситуации. Рассмотрим пример.

Листинг 10.

  1. package javaapplication38;

  1. /**

  2. *

    • @author Nezdoliy

  3. */

  4. public class Example_exception {

  1. public static void main(String[] args) {

  2. Example_exception.metod1(0);

  3. }

  4. public static void metod1(int par1){

  5. int b=5/par1;

  6. }

  7. }

При запуске данного кода мы увидим следующее сообщение в консоли.

Exception in thread "main" java.lang.ArithmeticException: / by zero

at javaapplication38.Example_exception.metod1(Example_exception.java:10)

at javaapplication38.Example_exception.main(Example_exception.java:7)

Обработчик по умолчанию показал , что в программе произошла попытка деления на ноль, был создан объект типа java.lang.ArithmeticException (при этом была показана вся последовательность вызовов до строки в методе , которая непосредственно вызвала исключение). Так отрабатывает обработчик по умолчанию.

Если мы хотим по своему обработать данную ошибку , то это может делаться следующим образом. Пример обработки :

Листинг 11.

  1. package javaapplication38;

  1. /**

  2. *

    • @author Nezdoliy

  3. */

  4. public class Example_exception {

  1. public static void main(String[] args) {

  2. Example_exception.metod1(0);

  3. }

  4. public static void metod1(int par1){

  5. try{

  6. int b=500/par1;

  7. System.out.println("Переменная b = "+b);

  8. } catch (ArithmeticException e) {

  9. System.out.println("В связи с некорректным входным параметром произведена " +

    • "его замена на параметр по умолчанию");

  10. metod1(5);

  11. }

  12. }

  13. }

Сообщение , которое мы получим на консоли , при запуске данной программы , следующее :

В связи с некорректным входным параметром произведена его замена на параметр по умолчанию

Переменная b = 100

Таким образом если предполагается возникновение исключения на каком-то участке кода ,это код располагается в блоке try-catch (смотри строку 10-13 Листинга 11) При возникновении исключения , создается объект типа Throwable и управление передается блоку catch или finally(в данном случае catch , по finally пример будет ниже). В блоке catch в качестве параметра указывается любой тип , суперклассом которого является класс Exception(строка 13,для этого класса суперклассом является класс Throwable) и далее код , который должен выполняться при возниконвении исключения. Если тип возникшего исключения может быть приведен к тому типу , который указан в параметре блока catch , или точно ему соответствует , то код блока catch выполняется . Если нет , то выполняется блок finally и управление передается обработчику исключений верхнего уровня. Если соответствующий обработчик не будет найден , тогда эту ситуацию перехватит обработчик по умолчанию.

Существует еще две конструкции , которые используются при обработке исключительных ситуаций . Это конструкция throw и throws. Первая конструкция используется в тех случаях , когда разработчик считает необходимым принудительно вызвать исключительную ситуацию(например , когда какие-либо переменные принимают значения допустимые для данного типа данных , но ошибочных с точки зрения логики программы. Переменная , в которой хранится температура пациента (тип float) , принимает значение >41,9 ) Вторая конструкция применяется в тех случаях , когда разработчик по каким-то причинам не считает возможным произвести перехват и обработку исключительной ситуации , и предлагает это сделать своим коллегам.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]