Я думаю, что может быть лучше рассматривать бросок как вашу информированную реакцию на исключение в вашем коде, а не на причину. Семантику я знаю, но это помогает.
Вы добавляете в исключение другое исключение для добавления информации. Ваше преобразование того, что может быть общим исключением ОС, в одно значимое для вашего приложения. например Исключение из-за нехватки памяти может быть перехвачено, и будет выдано новое исключение из-за нехватки памяти в качестве внутреннего исключения, говорящее что-то вроде «Ошибка при вычислении ответа на жизнь вселенной и всего остального». Еще полезнее, что просто исключение нехватки памяти.
Вы можете использовать «бросок» сам по себе в качестве повторного броска. Улов позволяет сделать что-то перед броском. Если мы говорим на C #, проверьте «наконец».
Когда происходит что-то действительно плохое, что не должно происходить, вы можете прервать и сообщить вызывающему, выдав исключение. Это означает, что вам не нужно, чтобы каждый метод возвращал коды результатов и каждый вызывающий вызывающий код проверял коды ошибок / успехов. Он также хорошо описывает, кто обрабатывает такие «исключения», или даже если вы просто оставляете это ОС.
Быстрый ответ ... он упрощает ваш код и дает вам лучший контроль над прерыванием и обработкой исключений. Думайте об этом как о системе обмена сообщениями / прерывания.