
- •050101- Комп'ютерні науки
- •050102- Комп'ютерна інженерія
- •Структура класса
- •Синтаксис работы с атрибутами и методами классов.
- •Константы. Статические переменные и методы.
- •Пакеты в Java.
- •Модификаторы доступа
- •Инициализация переменных , типы переменных.
- •Наследование.
- •Интерфейсы.
- •Связь классов и интерфейсов.
- •Обработка иключений.
- •Многопоточность.
- •2009Приложение 1
Обработка иключений.
В Java , обработка ошибок осуществляется путем перехвата исключительных ситуаций. Возникновение ошибки влечет за собой создание в программе объекта специального типа Throwable (это суперкласс всех исключительных ситуаций ) . При этом , нормальных ход потока управления прекращается и управление передается обработчику исключений. Если программист не предусмотрел перехват исключительных ситуаций , то их перехватывает обработчик по умолчанию. Он просто выводит на консоль информацию о возникшем исключении (типе и месте возникновения) и прерывет выполнение программы. Можно сделать предположение о том , что пользователи программ чувствовали бы себя , не совсем комфортно , если бы при малейшей ошибке программа прекращала свою работу. Для решения данной проблемы пишутся собственные обработчики исключительных ситуаций . Есть несколько вариантов обработки исключительной ситуации. Рассмотрим пример.
Листинг 10.
package javaapplication38;
/**
*
@author Nezdoliy
*/
public class Example_exception {
public static void main(String[] args) {
Example_exception.metod1(0);
}
public static void metod1(int par1){
int b=5/par1;
}
}
При запуске данного кода мы увидим следующее сообщение в консоли.
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.
package javaapplication38;
/**
*
@author Nezdoliy
*/
public class Example_exception {
public static void main(String[] args) {
Example_exception.metod1(0);
}
public static void metod1(int par1){
try{
int b=500/par1;
System.out.println("Переменная b = "+b);
} catch (ArithmeticException e) {
System.out.println("В связи с некорректным входным параметром произведена " +
"его замена на параметр по умолчанию");
metod1(5);
}
}
}
Сообщение , которое мы получим на консоли , при запуске данной программы , следующее :
В связи с некорректным входным параметром произведена его замена на параметр по умолчанию
Переменная b = 100
Таким образом если предполагается возникновение исключения на каком-то участке кода ,это код располагается в блоке try-catch (смотри строку 10-13 Листинга 11) При возникновении исключения , создается объект типа Throwable и управление передается блоку catch или finally(в данном случае catch , по finally пример будет ниже). В блоке catch в качестве параметра указывается любой тип , суперклассом которого является класс Exception(строка 13,для этого класса суперклассом является класс Throwable) и далее код , который должен выполняться при возниконвении исключения. Если тип возникшего исключения может быть приведен к тому типу , который указан в параметре блока catch , или точно ему соответствует , то код блока catch выполняется . Если нет , то выполняется блок finally и управление передается обработчику исключений верхнего уровня. Если соответствующий обработчик не будет найден , тогда эту ситуацию перехватит обработчик по умолчанию.
Существует еще две конструкции , которые используются при обработке исключительных ситуаций . Это конструкция throw и throws. Первая конструкция используется в тех случаях , когда разработчик считает необходимым принудительно вызвать исключительную ситуацию(например , когда какие-либо переменные принимают значения допустимые для данного типа данных , но ошибочных с точки зрения логики программы. Переменная , в которой хранится температура пациента (тип float) , принимает значение >41,9 ) Вторая конструкция применяется в тех случаях , когда разработчик по каким-то причинам не считает возможным произвести перехват и обработку исключительной ситуации , и предлагает это сделать своим коллегам.