Using exception or using multiple try catch java
我只是在编写代码,想知道使用异常类来捕获异常还是使用多种类型的try-catch是否有益。
1 2 3 4
| try{
// some error-prone code
}catch(Exception e ){
} |
或
1 2 3 4 5
| try{
// some error-prone code
}catch(NullPointerException n ){
}catch(ArrayOutOfBoundException a ){
} ..... etc |
- 如果要以不同方式处理每种类型的异常,则使用多个"捕获",否则就足够了。
-
或try { ... } catch (IOException | SQLException ex) { ... }
-
参见stackoverflow.com/questions/3495926/…
-
使用通用异常处理是一种好习惯吗?
-
这个stackoverflow.com/questions/17635545/…可能会帮助您
-
对您的"容易出错的代码"的正确响应是修复它,而不是捕获异常。对于NullPointerException和ArrayIndexOutOfBoundsException来说,您的代码都无法进行基本的空值和范围检查,而正确的操作方法就是修复该问题。
-
@Ankush对您的要求的答案取决于您要询问的人。对我来说,这是一种不好的做法,因为它会妨碍代码的可读性。其他可能在您的代码上工作的开发人员将很难辨别正在捕获的异常。因此,如果您知道要捕获的异常,我个人认为最好是显式指定它们,而不要使用通用异常。 –马克刚
您应该只捕获知道如何正确处理的异常;示例包括IOException,您可以在其中执行诸如重试操作,返回一些默认值或重新引发错误之类的操作; NumberFormatException和NumberFormatException,您尝试在其中将用户输入读取为数字并发现它是垃圾,因此您可以要求用户重试。
在几乎所有情况下,您实际上都不知道对"任何错误"的正确响应是什么,并且在许多情况下(例如,大多数未经检查的异常),您唯一要做的就是捕获掩盖了一些需要解决的潜在问题。通常,对于任何适用于"当前操作"的定义,通用的未知异常唯一可接受的响应是"编写日志消息并中止当前操作"(可能包括回滚事务和返回HTTP 503状态之类的事情)代码)。
在现实世界的应用程序中,最后一种catch Exception由框架代码(例如Spring或Jersey)处理,并执行这些广泛的清理操作。如果您的代码不能做得更好(通常需要知道具体发生了什么,而不仅仅是"异常"),那么它应该让异常传播并使用标准的错误处理程序。
这取决于您对异常的处理方式。如果每个异常都有特定的事情要做,那么您可以使用多个try catch。如果没有,您可以使用通用异常。同样,如果您知道哪种异常可能会更好地抛出代码,则只需使用该特定异常即可。
- 使用通用异常处理是一种好习惯吗?
-
@Ankush对您的要求的答案取决于您要询问的人。对我来说,这是一种不好的做法,因为它会妨碍代码的可读性。其他可能在您的代码上工作的开发人员将很难辨别正在捕获的异常。因此,如果您知道要捕获的异常,我个人认为最好是显式指定它们,而不要使用通用异常。