我正在使用JDK1.6_14。这是一个普遍的问题。
何时进行错误处理以及何时进行异常处理?
例如,当我执行除法运算时,我可以检查分母是否为零并抛出错误或只处理ArithmeticException
。
但是什么时候去找哪种方法?
感谢。
答案 0 :(得分:6)
一般情况下,避免引发您可以通过执行时测试轻松避免的异常,并且除了代码中其他地方的错误之外,这可能是一个问题。
如果您要按某种方式划分,并且您没有理由相信除数为0(例如,如果是用户输入的话),请先检查输入。
但是,如果由于其他原因,除数不应该为零(例如,它的大小应该绝对是非空的)那么至少更多是合理的让这个冒泡作为例外。在这种情况下,您不应该处理该特定异常,因为您并不期望它出错。你可能想要防御性地防范这种可能性 - 但是如果你发现这样的错误,你可能会想要抛出一些其他类型的异常来指出这个错误。同样,这不应该被“处理”,而不是在堆栈顶部附近,您可能会捕获一般异常(例如,即使单个请求失败,服务器也可以继续运行)。
一般情况下,您应该只是处理您无法合理预测的异常 - 例如I / O故障,或Web服务不存在等。
答案 1 :(得分:3)
有以下情况:
可能出现问题,您可以对此做些事情(比如用户在GUI中提供了无效值)。
可能出现问题,但你可以做的很少(例如:互联网上的某些服务器已经死亡)
有些事情可能出错,现有的例外情况没有足够的信息来查明发生了什么(请考虑IOException("Can't read file")
与IOException("Can't read file "+file)
对比IOException("Can't read file "+file.getAbsolutePath())
)。
解决方案:
使用try-catch
来处理错误并采取适当的措施来解决问题。在示例中,在某处显示消息并在GUI中选择具有非法值的字段。
抛出异常,希望堆栈中的代码可以对它做些什么,或者作为最后的手段,向用户提供异常。在示例中,请让用户稍后再试。
如果用户/开发人员很难弄清楚在看到异常消息时发生了什么,请加以充实。因此,当File.delete()
失败时,请将其包含在RuntimeException
中,其中 文件无法删除。
答案 2 :(得分:2)
这有助于理解差异differences-betweeen-exception-and-error。当你知道差异时,你就能够处理它们。 ;)
答案 3 :(得分:1)
Class Throwable有两个直接的子类:Error和Exception。 Error的子类主要用于发出异常系统状况的信号。一般来说,Exception的子类是可以恢复的。您可以选择使用try-catch-finally来处理异常。
答案 4 :(得分:-2)
错误处理是系统生成错误的处理,可能由任何不平衡系统组件或其他方式引起,其中,异常处理是处理可能由您的程序或相关软件生成的异常。
你可能不知道你的分母在某些问题上会变为零,这是通过大量的计算。将你的所有代码放在try / catch块中是好的