System.out.println("x=" + x + " z=" + z + " i=" + i);
}
{ // перехват целочисленного деления на ноль
System.out.println("Ошибка: деление на ноль, " + eArithmetic);
}
{ // перехват ошибки преобразования
System.out.println("Ошибка преобразования из строки в число, " + eNumberFormat);
}
System.out.println("В конце вызова z=" + z);
}
}
В этом случае ошибка деления на ноль в методе delenie() не обрабатывается, а выбрасывается в вызвавший его метод main(), где и перехватывается соответствующим блоком catch(). Неконтролируемое исключение класса ArithmeticExceptionненужно указывать в заголовке метода delenie().
В Java существует целая иерархия классов, предназначенных для обработки исключительных ситуаций. В вершине этой иерархии находится суперкласс Throwable (от throw able – способный возбудить). От Throwable наследуются классы Error (ошибка) и Exception (исключение). Объекты класса Error - неконтролируемые (непроверяемые) исключения, которые невозможно перехватить в блоках catch. Такие исключения представляют фатальные ошибки, после которых нормальная работа программы невозможна, например, переполнение стека. Объекты класса Exception – контролируемые исключения. У этого класса есть подкласс неконтролируемых исключений RuntineException – ошибок времени выполнения программы, которые, однако, перехватываются программами пользователя. Исключения для этого класса определяются автоматически. Подклассы класса RuntineException не нужно декларировать в заголовке методов после слова throws. Наиболее распространенные из них:
ArithmeticException ошибка, связанная с выполнением арифметических операций, например, деление на ноль целых чисел,
IndexOutOfBoundsException индекс элемента вышел за пределы допустимого диапазона:
ArrayIndexOutOfBoundsException при обращении к массиву,
StringIndexOutOfBoundsException при обращении к строке,
ArrayStoreException присваивание элементу массива значения несовместимого типа,