Возможно для кого-то это не очевидно. Однако у некоторых может возникнуть вопрос, а почему нельзя писать такой код, чтобы вообще не возникало ошибок? Ведь если вы ставите пометку (ключевое слово, предупреждение) throws, то почему бы самому вместо этого не запихать всё тело вашего метода или возможное место появления исключения в блок try-catch? Ведь вы знаете что риск есть, не от балды же появляется throws в заголовке метода!
А пишется throws вместо try-catch для того, чтобы не ограничивать функционал используемого метода, а точнее его применимость в разных системах. Вот допустим вы сделали блок try-catch в своём методе, где может возникнуть исключительная ситуация. А откуда вы знаете что ваша реализация блока catch устроит того человека, кто будет использовать ваши методы? Например вы реализовали вывод в консоль сообщения об ошибке ввода и рекусивный вызов этого метода для повторного ввода. А ваш метод нужно применить в системе где нет консоли, где нужен графический интерфейс, а там будет тишина на экране, программа зависнет в рекурсивном вызове. Или вообще в этой системе нет экрана, а только печатное устройство, например кассовый аппарат, или информацию надо выводить на какой-то уникальный контроллер светодиодных панелей для наружней рекламы, вы об этом НЕ МОЖЕТЕ ЗНАТЬ!
Так что если вы знаете о возможности возникновения исключения в вашем методе, который будут использовать другие люди, то не надо решать за них, что делать при возникновении исключения, оставьте им возможность реализовать ту функциональность, которая необходима им, пишите throws, а они напишут свой catch)))
Роман Кончалов
28 уровень
Почему иногда лучше прописывать throws, а не использовать блок try - catch
Комментарии (2)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Сергей Я Java Developer в DXC/Luxoft Expert
20 мая 2021, 20:04
обработка ошибок не происходит на низком уровне бизнес логики, по этой причине ошибки с этого уровня пробрасываются выше, где уже идет полноценная обработка. Таким образом происходит как использование throw, так и использование try-catch
0
Сергеев ВикторMaster
20 мая 2021, 17:52
холливарная тема ) checked vs unchecked
По сути, если у разработчика достаточно контекста чтобы решить что делать в этой ситуации, то исключение выкидывать смысла нет.
Если контекста не достаточно, то можно выкинуть исключение
Можно сравнить с обычной работой. Большинство возникающих проблем вы можете решить сами, но иногда нужно делегировать решение вышестоящим.
Например если вас попросили что-то напечатать на компе. Вы приходите на свое место, а у вас внезапно мышка не работает. Вы и сами знаете, что достаточно сходить к технику и поменять мышку, ну или позвать его.
Т.е. есть исключительная ситуация, вы знаете что делать и как её решить и даже больше, обратившись к вышестоящему человеку, вы получите тот же совет "обратись к технику". (ситуация когда исключение не выбрасывается)
Но если внезапно комп загорелся, то тут надо бежать до пожарной кнопки и делегировать решение выше, т.к. у вас не достаточно понимания что делать (тушить или пусть горит себе спокойно)
Часто просят еще местного начальника предупредить о возгорании (а тут мы выбрасываем исключение)
+7