Выбрасывание исключений методами
Ранее отмечалось, что если метод выбрасывает или может выбросить исключение, которое в методе не обрабатывается, этот факт нужно отразить при описании метода. В сигнатуре метода после ключевого слова throws перечисляются классы исключений, которые может выбрасывать метод. Причина такой предупредительности состоит в том, что внешним методам нужно сообщить, к каким неприятностям следует быть готовым при вызове данного метода. Ранее мы не использовали ключевое слово throws, хотя некоторые методы и выбрасывали исключения. Дело в том, что перечисляются далеко не все выбрасываемые методом исключения. В частности, не нужно явно указывать исключения класса Error, а также класса RuntimeException и его подклассов. Рассматривавшиеся ранее исключения как раз относились к подклассам RuntimeException.
Общий синтаксис описания метода, выбрасывающего исключения (которые не
обрабатываются в методе), выглядит так:
тип_результата имя_метода(аргументы) throws исключение1,исключение2,...{
// тело метода
}
Если метод может выбрасывать несколько исключений, их классы перечисляются через запятую. Пример описания метода, выбрасывающего необрабатываемое исключение, приведен в листинге 8.
Листинг 8.Метод выбрасывает исключение
class ThrowsDemo{
// Описание метода:
static void throwOne() throws IllegalAccessException{
System.out.println("Ошибка в методе throwOne!");
// Выбрасывание исключения:
throw new IllegalAccessException("Большая ошибка!");}
public static void main(String args[]){
try{
throwOne(); // Метод выбрасывает исключение
}catch(IllegalAccessException e){ // Обработка исключения
System.out.println("Случилась неприятность: "+e);}
}}
В результате выполнения этой программы получаем два сообщения:
Ошибка в методе throwOne!
Случилась неприятность: java.lang.IllegalAccessException: Большая ошибка!
Программа достаточно простая и ее особенность лишь в том, что при описании метода throwOne() явно указано, что метод может выбрасывать исключение класса IllegalAccessException (ошибка доступа).
Методом throwOne() выводится на экран сообщение об ошибке, затем выбрасывается исключение командой:
throw new IllegalAccessException("Большая ошибка!")
В данном случае исключение — это анонимный объект класса IllegalAccessException, для создания которого использовался конструктор с текстовым аргументом. В методе это исключение не отслеживается и не обрабатывается, о чем и свидетельствует наличие в сигнатуре метода ключевого слова throws и названия класса исключения IllegalAccessException. Отметим, что если бы это исключение в методе обрабатывалось, необходимости указывать в сигнатуре метода ключевое слово throws (и класса исключения) не было бы.
В главном методе программы вызывается метод throwOne(), выбрасываемое методом исключение отслеживается и обрабатывается. Объект (анонимный) выброшенного методом исключения передается в блок catch.
Дата добавления: 2016-06-22; просмотров: 2200;