2016-09-26 3 views
0

У меня есть несколько типов исключений, которые я определяю и ловля (например, ошибки сети, ошибка проверки и т. Д.) - теперь я в основном хочу сказать «поймать все другие исключения, которые я не ожидал «. Каков наилучший способ сделать это?Java - Поймать все другие непредвиденные исключения

Это просто использование общего Excepion e?

Благодаря

+0

Да. Или вы можете поймать Throwable, но это нецелесообразно. – Kon

ответ

7

Я бы рекомендовал написать все ожидаемые исключения, а затем выполнить его с помощью Исключения, например.

try 
{ 
} 
catch (expectedException1 e) 
{ 
} 
. 
. 
. 
catch (Exception e) 
{ 
} 

Это поможет вам в принятии мер по отдельному исключению, что вы ожидаете, и, наконец, когда вы получите исключение, вы можете справиться с этим в общем. Поскольку класс Exception находится в верхней части всех исключений, это должно быть последним. Общее правило состоит в том, что по мере того, как вы идете по списку, иерархия идет в начало

0

Исключение является «крупнейшим» тип Exception, что нужно разумно поймать; поскольку он охватывает все, что не является Error.

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

  1. Вы понятия не имеете, что ваш код делает
  2. Вашего кода является настолько сложным, что вы действительно не можете знать, что может выйти из него

И для обоих вариантов; это то, чего нужно избегать!

Другими словами: ловить Исключение - это то, что вы обычно делаете только на очень высоком уровне - более низкие уровни в вашем приложении должны точно знать, какие исключения выходят из нижних уровней; и только поймать их. Если вообще, вы действительно хотите только один улов (на «далеко за пределами») для Исключение. Потому что: единственное, что вы можете сделать в блоке catch там - некоторое ведение журнала и сообщение об ошибке для пользователя.

+0

Существует третий вариант, возможно, наиболее оправданный случай: у вас есть возможность подключения, по сравнению с которой у вас мало или вообще нет контроля. – biziclop

-1

Для лучшей практики исключения, которые не распространяют RuntimeException, должны либо быть пойманы, либо обработаны, либо выбраны. Существует также setUncaughtExceptionHandler, который может быть установлен в java.lang.Thread, который вы можете использовать как «ловушку»

+0

setUncaughtExceptionHandler может прерывать работу с другими обработчиками исключений в коде. Они идеально используются системами отчетов о сбоях. В общем, вы не должны использовать это, чтобы поймать все свои исключения! Кроме того, если используется, следует принять надлежащую осторожность, чтобы передать его оригинальным обработчикам исключений, как только наша работа будет завершена. – prabodhprakash

Смежные вопросы