Собственные исключения в Java

Разработчик может создать собственное исключение как подкласс класса Exception и затем использовать его при обработке ситуаций, не являющихся исключениями с точки зрения языка, но нарушающих логику вещей. Например, появление объектов типа Human (Человек) с отрицательным значением поля age (возраст).

/* пример # 5 : метод, вызывающий исключение, созданное программистом:

RunnerLogic.java */

package chapt08;

public class RunnerLogic {

public static double salary(int coeff)

throws SalaryException {

double d;

try {

if((d = 10 – 100/coeff) < 0)

throw new SalaryException("negative salary");

else return d;

} catch (ArithmeticException e) {

throw new SalaryException("div by zero", e);

}

}

public static void main(String[] args) {

try {

double res = salary(3); //или 0, или 71;

} catch (SalaryException e) {

System.err.println(e.toString());

System.err.println(e.getHiddenException());

}

}

}

При невозможности вычислить значение генерируется объект ArithmeticException, обработчик которого, в свою очередь, генерирует исключение SalaryException, используемое в качестве собственного исключения. Он принимает два аргумента. Один из них – сообщение, которое может быть выведено в поток ошибок; другой – реальное исключение, которое привело к вызову нашего исключения. Этот код показывает, как можно сохранить другую информацию внутри пользовательского исключения. Преимущество этого сохранения состоит в том, что если вызываемый метод захочет узнать реальную причину вызова SalaryException, он всего лишь должен вызвать метод getHiddenException(). Это позволяет вызываемому методу решить, нужно ли работать со специфичным исключением или достаточно обработки SalaryException.

/* пример # 6 : собственное исключение: SalaryException.java */

package chapt08;

public class SalaryException extends Exception {

private Exception _hidden;

public SalaryException(String er) {

super(er);

}

public SalaryException(String er, Exception e) {

super(er);

_hidden = e;

}

public Exception getHiddenException() {

return _hidden;

}

}

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

Вы можете следить за любыми ответами на эту запись через RSS 2.0 ленту. Вы можете оставить ответ, или trackback с вашего собственного сайта.

Оставьте отзыв

XHTML: Вы можете использовать следующие теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

 
Rambler's Top100