我只是编写代码并想知道使用异常类来捕获异常或使用多种类型的try-catch是否合适。
try{
// some error-prone code
}catch(Exception e){
}
要么,
try{
// some error-prone code
}catch(NullPointerException n){
}catch(ArrayOutOfBoundException a){
} ..... etc
这取决于您将如何处理异常。如果每个例外都有特定的事情要做,那么你可以使用多个try catch。如果不是,您可以使用通用异常。此外,如果您知道代码可能抛出的异常类型,那么只需使用该特定异常即可。
您应该只捕获您知道如何正确处理的异常;示例包括IOException
,您可以在其中执行重试操作,返回一些默认值或重新抛出错误等操作;和NumberFormatException
,你试图将用户输入读作数字并发现它是垃圾,所以你可以要求用户再试一次。
几乎在所有情况下,你实际上并不知道对“任何错误”的正确反应是什么,并且在许多情况下(例如,大多数未经检查的异常),你通过捕获Exception
所做的唯一事情是掩盖一些潜在的需要解决的问题。通常,对于通用未知异常可接受的唯一响应是“写入日志消息并中止当前操作”,无论“当前操作”的任何定义是否适用(可能包括回滚事务和返回HTTP 503状态)码)。
在实际应用程序中,这个最后的catch Exception
由框架代码(例如Spring或Jersey)处理,并执行这些广泛的清理操作。如果你的代码不能做得更好(通常需要知道具体发生了什么,而不仅仅是“异常”),那么应该让异常传播并使用标准的错误处理程序。