На этом шаге мы поговорим про повторное генерирование исключений
Исключение можно генерировать и в блоке catch, образуя тем самым цепочку исключений. Это обычно делается для того, чтобы изменить тип исключения. Это может быть понадобится, когда в крупном проекте если несколько подпроектов и нужно точно знать в какой части программы произошла исключительная ситуация. Ниже приведен каркас повторного генерирования:
try { код } catch (ТипИсключения1 e) { обработчик исключений данного типа throw new ТипИсключения2(); }
Стоит заметить, что бывает полезным сохранить информацию о старом исключении. Сделать это можно следующим образом:
try { код } catch (ТипИсключения1 e) { обработчик исключений данного типа Throwable ne = new ТипИсключения2(); ne.initCause(e); throw ne; }
Теперь при перехвате последующего исключения предыдущее исключение можно извлечь следующим образом:
Throwable e = se.getCause();
Настоятельно рекомендуем именно такой способ заключения в оболочку. Такой способ позволяет генерировать исключения более высокого уровня, не теряя подробных сведений об исходном исключении.
На следующем шаге мы поговорим про блок finally