• Иллюстрированный самоучитель по Java

    Создание собственных исключений

    Прежде всего, нужно четко определить ситуации, в которых будет возникать ваше собственное исключение, и подумать, не станет ли его перехват невольно перехватывать также и другие, не учтенные вами исключения.

    Потом надо выбрать суперкласс создаваемого класса-исключения. Им может быть класс Exception или один из его многочисленных подклассов.

    После этого можно написать класс-исключение. Его имя, по соглашению, должно завершаться словом Exception. Как правило, этот класс состоит только из двух конструкторов и переопределения методов tostring() и getMessage().

    Рассмотрим простой пример. Пусть метод handle(int cipher) обрабатывает арабские цифры 0-9, которые передаются ему в аргументе cipher типа int.

    Мы хотим выбросить исключение, если аргумент cipher выходит за диапазон 0-9.

    Прежде всего, убедимся, что такого исключения нет в иерархии классов Exception. Ко всему прочему, не отслеживается и более общая ситуация попадания целого числа в какой-то диапазон. Поэтому будем расширять наш класс. Назовем его cipherException, прямо от класса Exception. Определим класс cipherException, как показано в листинге 16.6, и используем его в классе ExceptDemo. На рис. 16.5 продемонстрирован вывод этой программы.

    Листинг 16.6. Создание класса-исключения.

    class CipherException extends Exception{
    private String msg;
    CipherException(){ msg = null;}
    CipherException(String s){ msg = s;}
    public String toString(){
    return "CipherException (" + msg + ");
    }
    }
    class Except Demo(
    static public void handle(int cipher) throws CipherException{
    System.out.pnntln("handle()'s beginning");
    if (cipher < 0 || cipher > 9)
    throw new CipherException("" + cipher);
    System.out.println("handle()'s ending");
    }
    public static void main(String[] args){
    try{
    handle(1);
    handle(10);
    }catch(CipherException ce){
    System.out.println("caught " + ce);
    ce.printStackTrace();
    }
    }
    }
    

    Иллюстрированный самоучитель по Java › Обработка исключительных ситуаций › Создание собственных исключений
    Рис. 16.5. Обработка собственного исключения

    Заключение

    Обработка исключительных ситуаций стала сейчас обязательной частью объектно-ориентированных программ. Применяя методы классов J2SDK и других пакетов, обращайте внимание на то, какие исключения они выбрасывают, и обрабатывайте их. Исключения резко меняют ход выполнения программы, делают его запутанным. Не увлекайтесь сложной обработкой, помните о принципе KISS.

    Например, из блока finally{} можно выбросить исключение и обработать его в другом месте. Подумайте, что произойдет в этом случае с исключением, возникшем в блоке try{}? Оно нигде не будет перехвачено и обработано.

    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.