2016-09-26 31 views
0

我有几个异常类型,我定义和捕捉(即网络错误,验证错误等) - 现在我基本上想说“赶上我没有预料到的所有其他异常“。做这个的最好方式是什么?Java - 赶上所有其他意外的例外

它只是使用通用Excepion e

感谢

+0

是的。或者你可以捕获Throwable,但这是不明智的 – Kon

回答

7

我会建议编写所有预期的异常,然后使用异常进行跟踪,例如,

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

这将有助于您针对您期望的个别异常采取行动,最后,当您获得异常时,您可以一般处理异常。因为Exception类位于所有异常的顶部,所以最后需要这样做。一般规则是,当您沿着列表向下走时,层次结构向顶端

0

异常是“最大”类型的异常是一个应合理赶上的;因为它涵盖了任何不是Error

但一个警告:根据你的具体情况,捕捉异常仍然可以是不好的做法。这样做,通常指示为一两件事情:

  1. 你不知道你的代码是做
  2. 你的代码是如此复杂,你真的不知道有什么可能出现的出来

对于这两种选择;这是要避免的!

换句话说:捕捉异常是你通常只在很高层次上做的事情 - 在你的应用程序中的较低层次应该完全知道哪些异常来自较低层次;只抓住那些。如果有的话,你真的只想在例外有一个渔获物(在“远处”)。因为:唯一可以在catch块中执行的操作 - 一些日志记录和一条错误消息给用户。

+0

还有第三种选择,可能是最合理的情况:你有可插拔的功能,你可以很少或根本没有控制权。 – biziclop

-1

为了获得最佳实践,不应扩展RuntimeException的异常应该被捕获并处理或抛出。还有setUncaughtExceptionHandler,它可以在java.lang.Thread中设置,您可以使用它作为'全部收集'

+0

setUncaughtExceptionHandler可以在代码中与其他可能的异常处理程序中断。它们非常适合崩溃报告系统。一般来说,你不应该用它来捕捉你所有的异常!而且,如果使用了,一旦我们的工作完成,必须采取适当的谨慎措施将它传递给原始异常处理程序。 – prabodhprakash