Вы когда-нибудь НЕ поймаете исключение или выбросите исключение, которое не будет поймано? - PullRequest
3 голосов
/ 20 марта 2009

Я имел дело со случаями, когда я выбрасывал / перебрасывал исключение, зная, что код, окружающий его, перехватит конкретное исключение. Но есть ли время, когда вы захотите создать исключение, зная, что оно не будет поймано?

Или, по крайней мере, НЕ ловить исключение?

Исключения немедленно останавливают приложение, если они не обработаны правильно? Так что, думаю, я спрашиваю, не хотите ли вы когда-нибудь нарочно позволить своему приложению умереть?

Ответы [ 14 ]

0 голосов
/ 20 марта 2009

Да, это моя ЕДИНСТВЕННАЯ возможность дать разработчику, использующему сервис / объект, шлепок, чтобы сказать им: «ЧТО ДЕЛАТЬ, ЧТО БУДЕТ !!!!»

Это и избавление от возможностей, которые вы не хотите допускать или которые кажутся «невозможными». Приложения, которые ловят все исключения и продолжают работать, - это просто огороженный сад, окруженный хаосом.

0 голосов
/ 20 марта 2009

Если вы пишете всю заявку, то ваши причины ваши. Я могу вспомнить несколько ситуаций, когда вы могли бы захотеть выбросить исключение и позволить приложению умереть, хотя большинство из них не очень веские причины.

Лучшая причина обычно при отладке. Я часто отключаю исключения во время отладки, чтобы я лучше знал, где что-то не так. Вы также можете просто включить выброшенные исключения в отладчике, если вы запускаете его на машине с отладчиком.

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

Если вы пишете код API или Framework-код, который вы не будете использовать самостоятельно, то вы не представляете, поймает ли кто-нибудь ваши исключения.

0 голосов
/ 20 марта 2009

Это зависит от того, что вы подразумеваете под «быть пойманным». Что-то, где-то в конечном итоге ловит исключение, будь то базовая ОС или что-то еще.

У нас есть система рабочих процессов, которая выполняет планы работ, состоящие из отдельных заданий. Каждое задание выполняет блок кода. За некоторыми исключениями мы не хотим обрабатывать их в коде, а бросаем их в стек, чтобы внешняя система рабочего процесса ловила их (что происходит полностью вне процесса метателя).

0 голосов
/ 20 марта 2009

Вы, вероятно, не захотите создать необработанное исключение в любом месте, где его могут видеть конечные пользователи, но часто допустимо, чтобы клиенты вашего API (другие программисты) решали, как обрабатывать исключения.

Например, предположим, что вы разрабатываете библиотеку классов Java. Вы выставляете открытый метод, который принимает строку. В вашем приложении нулевое входное значение может вызвать ошибку. Вместо того, чтобы обрабатывать ошибку самостоятельно, было бы приемлемо проверить нулевое значение, а затем выдать исключение IllegalArgumentException.

Вы, конечно, должны документально подтвердить, что ваш метод выдает это исключение при таких обстоятельствах. Такое поведение становится частью контракта вашего метода.

...