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


Классы встроенных исключений в Java описывают только наиболее общие ошибки, поэтому в некоторых случаях нужно или полезно описать собственное исключение. В Java такая возможность имеется.

Технически создание собственного исключения сводится к созданию подкласса класса Exception, который, в свою очередь, является подклассом класса Throwable.

В создаваемом подклассе ничего не нужно реализовывать. Что касается класса Exception, то он не определяет собственных методов, а наследует их из класса Throwable. Некоторые методы класса Throwable представлены в табл. 3.

Таблица 3.Методы класса Throwable

Метод Описание
fillInStackTrace() Метод в качестве результата возвращает объект Throwable, который содержит полную трассу стека. Метод не имеет аргументов
getLocalizesMessage() В качестве результата метод возвращает строку (объект класса String) с локализованным описанием исключения. Метод не имеет аргументов
getMessage() Методом возвращается строка (объект класса String) с описанием исключения. Метод не имеет аргументов
printStackTrace() Методом отображается трасса стека. Метод не имеет аргументов
toString() Метод в качестве значения возвращает объект класса String, содержащий описание исключения. Метод не имеет аргументов

 

В листинге 9 приведен пример программы, в которой создается пользовательский класс для исключения.

Листинг 9.Программа с пользовательским классом исключения

// Класс исключения:

class MyException extends Exception{

private double min;

private double max;

private String error;

// Конструктор:

MyException(double x,double y,String str){

min=x;

max=y;

error=str;}

// Переопределение метода toString():

public String toString(){

return "Произошла ошибка ("+error+"): попадание в диапазон ["+min+","+max+"]";}

}

class MyExceptionDemo{

// Метод выбрасывает исключение пользовательского типа:

static double MyLog(double x) throws MyException{

if(x<0||x>1) return Math.log(x*(x-1));

else throw new MyException(0,1,"неверный аргумент");

}

public static void main(String args[]){

double x=-1.2,y=1.2,z=0.5;

try{

System.out.println("ln("+x+")="+MyLog(x));

System.out.println("ln("+y+")="+MyLog(y));

System.out.println("ln("+z+")="+MyLog(z));

}catch(MyException e){// Обработка исключения

System.out.println(e);}

}

}

Результат выполнения программы такой:

ln(-1.2)=0.9707789171582248

ln(1.2)=-1.427116355640146

Произошла ошибка (неверный аргумент): попадание в диапазон [0.0,1.0] В программе описывается класс пользовательского исключения MyException, который наследует класс Exception. У класса есть три закрытых поля: поля min и max типа double и поле error, являющееся объектом класса String. Также в классе переопределяется метод toString(). В качестве результата методом возвращается текстовая строка, в которой содержится информация всех трех полей класса.

В главном методе программы определяется статический метод MyLog() с аргументом типа double. В качестве результата метод возвращает значение типа double. Метод описан как способный выбрасывать исключение пользовательского класса MyException.

В теле метода для значения аргумента x вычисляется натуральный логарифм

по формуле:

ln (x (x - 1 ) )

Если аргумент, переданный методу MyLog(), лежит вне пределов диапазона [0 ,1 ] , методом возвращается значение Math.log(x*(x-1)) (в этой команде имеет место обращение к статическому методу вычисления натурального логарифма log(), описанному в классе Math). Если же аргумент метода MyLog() попадает в диапазон [0 ,1 ] , приведенное выражение вычислено быть не может, поскольку у натурального логарифма аргумент отрицательный. В этом случае методом MyLog() генерируется и выбрасывается исключение пользовательского типа MyException. Аргументами конструктору при этом передаются границы диапазона [0 ,1

и описание ошибки (неверный аргумент).

В главном методе программы выполняется попытка вычислить значение методом MyLog() и вывести его на экран. При этом отслеживается возможность появления исключения класса MyException. В случае если соответствующая ошибка возникает, выполняется ее обработка, которая состоит в том, что на экран выводится описание объекта исключения. Этот объект передается методу println() в блоке catch, а наблюдаемый при этом результат отражает способ переопределения метода toString() в классе MyException.

 



Дата добавления: 2016-06-22; просмотров: 1308;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.