Создание собственных исключений
Классы встроенных исключений в 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;