Новые форумы для: пользователей, администраторов, математиков и филологов.
0

Оператор throws показывает, что метод может выдавать исключение. Почему не пишут обработчик исключений, когда пишут Имяметода throws исключение. Это и есть передача дальше, т.е обработчик будет написан для этого исключения только в другом месте. Так?

задан 21 Фев 15:46

spbsmile's gravatar image

spbsmile
372
0% принятых

изменен 21 Фев 15:49

%D0%A5%D1%8D%D1%88%D0%9A%D0%BE%D0%B4's gravatar image

ХэшКод
5.4k427

1

Ну в целом вы все правильно поняли :)

(21 Фев 15:48) Mage
3

Идея такого подхода к обработке ошибок следующая: в данном методе вы обрабатываете только ошибки, которые возникают в процессе его работы. Все остальное должно выбрасываться наверх. Причем вы выбрасываете разные типы ошибок (классы), что позволяет обрабатывать их независимо. Реализацию такого подхода можно увидеть во многих стандартных классах, - особенно в классах для работы с файлами или БД.

С другой стороны есть и обратная методика: ваш метод сначала считывает данные из файла, на основе этих данных делает запросы к БД, а потом вызывает генерацию репорта (с последующим сохранением в файл). В таком методе могут возникать разные типы ошибок - при считывании файла, при работе с БД, при записи файлов. Предположим, что этот метод - часть какого-то API. В таком случае есть смысл, наоборот, все типы ошибок обрабатывать внутри метода. А в случае возникновения выбрасывать на верх ошибку типа специально созданного для этого API. Ведь пользователю не всегда важно, в чем там возникла ошибка, его может интересовать просто результат работы метода.

Кроме этого механизм выбрасывания ошибок используется еще и как "извращенный" способ обрыва большой вложенности методов или рекурсивных вызовов. Ведь выдав определенный тип ошибки и задав обработку на 5 уровней выше, вы можете вернуться сразу на 5 уровней вверх, что в принципе не позволяет ни один оператор в java. Получается что-то на подобие оператора goto в других языках.

ссылка

отвечен 21 Фев 22:12

jmu's gravatar image

jmu
2.5k14

изменен 22 Фев 20:32

Angry%20Bird's gravatar image

Angry Bird
609310

Ваш ответ

Если вы не нашли ответ, задайте вопрос.

Здравствуйте

ХэшКод - это совместно редактируемый форум вопросов и ответов для начинающих и опытных программистов.

Присоединяйтесь!

отмечен:

×1,473

задан
21 Фев 15:46

показан
82 раза

обновлен
22 Фев 20:32

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии