Исключения представляют собой объекты, которые позволяют обработать исключительную ситуацию.
Для отлова исключительных ситуаций используют конструкцию
try {
// выполняемый код, в котором возможна ошибка
} cath ... {
// обработка исключения
} finally {
// код, который выполняется в любом случае, есть ошибка или нет
}
Каждый тип исключительной ситуации обрабатывается отдельным видом исключения.
В самом общем виде можно описать исключение типа Exception, так как остальные типы исключений наследуют этот класс:
catch (Exception e) , где e - это объект класса Exception.
Если указан обработка различных исключений, то надо указывать данное исключение в самом конце, иначе до специфических очередь не дойдет. Например:
class Program {
public static void main(String[] args) {
int a = 10;
try {
a = a / Integer.parseInt(args[0]);
System.out.println("10 / " + args[0] + " = " + a);
} catch (ArithmeticException e) {
System.out.println("Error!");
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("Выход за пределы массива");
// А если пользователь не ввел значения в командной строке?
} catch (Exception e) {
System.out.println("Другая ошибка");
}
}
}
Можно создавать собственные классы исключений, наследующие Exception. Для вызова собственного исключения необходимо перед созданием объекта исключения использовать слово throw (это фактически искусственная передача выполнения нужному нам блоку catch).
Пример:
class MyDivByZero extends Exception {
public void MyDivByZero() {
System.out.println("Что такое? Вы решили делить на 0?");
}
}
class Arithmetic {
public static double myDelete(double a, double b) throws MyDivByZero {
double c;
try {
if (b == 0.0) {
throw new MyDivByZero();
}
c = a / b;
} catch (MyDivByZero e) {
c = 0.0;
System.exit(0);
}
return c;
}
}
|