Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Зачем необходимо каждый раз при вызове метода, который бросает исключение, всегда нужно обрабатывать вызов с try/catch?

Retronik33 Профи (830), закрыт 10 месяцев назад
Если убрать с байткода метода Exceptions атрибут, то прога запустится и при бросании исключения, он будет печатать стек трассировку и завершать прогу, что нормально.
Зачем это делать, если все за меня сделает JVM?
Лучший ответ
Реципиент Гений (79755) 11 месяцев назад
Кому необходимо? Мне - нет. Есть масса способов пробросить исключение дальше и не морочить себе голову. Например, объявить его в сигнатуре своего метода:
 public void myBelovedMethod() throws StinkyException {
callSomeThrowingStuff(); // вызываем метод, бросающий StinkyException
}

Если этот вариант не подходит (руки связаны следованием кем-то другим заданному протоколу), то можно исключение поймать и переотбросить как RuntimeException, прицепив его туда.
 public void myBelovedMethod() {
try {
callSomeThrowingStuff(); // вызываем метод, бросающий StinkyException
} catch (Exception e) {
throw new RuntimeException(e);
}
}

Можно написать отдельный метод, принимающий функцию и упаковывающий её исключения.
Остальные ответы
Ranma Оракул (80190) 11 месяцев назад
Чтобы обработать исключение не стандартно, а кастомнл, как тебе нужно.
Retronik33Профи (830) 11 месяцев назад
А если я не хочу, потому-что это муторно?
Ranma Оракул (80190) Retronik33, тогда не делай.
Jurijus Zaksas Искусственный Интеллект (438626) 11 месяцев назад
Это тебе решать, должно ли исключение быть критическим и завершать программу, или ты все же хочешь оставить пользователю возможность как-нибудь выкрутиться без того, чтобы всю программу перезапускать полностью.
Retronik33Профи (830) 11 месяцев назад
Оставить пользователю возможность - это для моих полноценных общедоступных програм.
А не морочить себе голову, и не писать try/catch не для java.lang исключений - это для моих тестовых личных програм. Но Джеймс Гослинг не оставил такую возможность видимо, прийдется тратить время на написание try/catch.
Оракул Оракул (61795) 11 месяцев назад
Не хотите try catch юзайте RuntimeException
Не хотите RuntimeException, юзайте @SneakyThrows из lombok
Похожие вопросы