В общем, у меня были дни, потраченные впустую людьми, выбрасывающими подобные исключения.
Я рекомендую придерживаться нескольких основных правил с исключениями:
Если вы абсолютно уверены, что вы НИКОГДА не вызовете проблему с проверенным исключением, поймайте ПРОСТО это исключение и прокомментируйте, почему вам не нужно его обрабатывать. (Sleep создает исключение InterruptedException, которое всегда можно игнорировать, если вы на самом деле не заинтересованы в нем, но, честно говоря, это единственный случай, который я обычно игнорирую - даже при этом, если вы его никогда не получаете, какова стоимость его регистрации?)
Если вы не уверены, но можете время от времени получать его, перехватывайте и регистрируйте трассировку стека только для того, чтобы, если она вызывает проблему, ее можно было найти. Снова поймайте только то исключение, которое вам нужно.
Если вы не видите, как может быть выбрано проверенное исключение, перехватите его и перебросьте как неконтролируемое исключение.
Если вы точно знаете, что является причиной исключения, поймайте его и запишите точно, почему, в этом случае вам на самом деле не нужна трассировка стека, если вы очень четко знаете, что ее вызывает (и вы могли бы упомянуть класс, который войдите в систему, если вы еще не используете log4j или что-то еще.
Похоже, ваша проблема попадет в последнюю категорию, и для такого рода уловки никогда не делайте того, что вы написали (исключение e), всегда делайте конкретное исключение на случай, если выдается какое-то непроверенное исключение (плохие параметры, нулевой указатель, ...)
Обновление: Основная проблема здесь в том, что проверенные исключения являются плохими. Единственный широко используемый язык, на котором они существуют, - это Java. Теоретически они аккуратны, но в действии они вызывают такое поведение, что вы не можете получить с непроверенными исключениями.
Многие люди прокомментировали тот факт, что я сказал, что скрывать их иногда хорошо. Чтобы быть конкретным, я могу вспомнить один случай:
try {
Thread.sleep(1000);
catch (InterruptedException e) {
// I really don't care if this sleep is interrupted!
}
Я полагаю, что основная причина, по которой я считаю, что это использование нормально, заключается в том, что такое использование InterruptedException, во-первых, является злоупотреблением проверенным шаблоном исключения, оно скорее сообщает о результате сна, чем указывает на условие исключения.
Было бы гораздо разумнее иметь:
boolean interrupted=Thread.sleep(1000);
Но они очень гордились своим новым шаблоном проверенных исключений, когда они впервые создали Java (понятно, что это действительно изящная концепция - только на практике не получается)
Я не могу представить другой случай, когда это приемлемо, поэтому, возможно, мне следовало бы указать это как единственный случай, когда может быть допустимым игнорировать исключение.