Page 231 - 6253
P. 231
throw new SalaryException("Ділення на 0", e);
}
}
public static void main(String[] args) {
try {
double res = salary(3);
} catch (SalaryException e) {
System.err.println(e.toString());
System.err.println(e.getHiddenException());
}
}
}
У випадку, якщо значення заробітної плати обчислити не вдається, то
генерується об'єкт класу ArithmeticException, обробник якого, в свою чергу, генерує
виняток SalaryException, який раніше був створений розробником. Він приймає два
аргументи. Один з них – повідомлення, яке має бути виведене в потік помилок;
інший – існуючий об’єкт винятку, який призвів до виклику винятку SalaryException.
Представлений вище код показує, як можна зберегти інформацію всередині
власного винятку. Перевага такого збереження полягає в тому, що метод всередині
якого генерується виняткова ситуація може дізнатися реальну причину виникнення
винятку SalaryException, викликавши метод getHiddenException().
// Створення власного винятку SalaryException
public class SalaryException extends Exception {
private Exception _hidden;
public SalaryException(String er) {
super(er);
}
public SalaryException(String er, Exception e) {
super(er);
_hidden = e;
230