我想知道如何创建并抛出已检查的异常或未经检查的异常。
例如,我有一个服务,它使用一些数据并在使用之前验证它。在验证过程中某个字段不符合规则,我想抛出一个异常,如ValidationException()。我如何知道应该选中或取消选中它。
在另一种情况下,我从我的代码中调用外部Web服务,例如google stock api。假设我的超时为3秒。如果时间exprires我想抛出异常说BackendException()。如何知道它是否应该是已检查的异常或未经检查的异常。
提前致谢。
答案 0 :(得分:3)
可能会有不同的意见,但我会说不同的是调用者应该如何处理该异常:
ValidationException
:如果数据无效,则调用者必须处理该数据,例如通过告诉某人修复数据或尝试别的东西。NullPointerException
:它不应该发生你要使用的东西是null,所以它可能被认为是一个编程错误。如果某些内容可能为null,但您不应该使用已检查的异常。 IllegalArgumentException
,这是一个未经检查的异常。如果抛出此异常,通常会出现编程错误,因为违反了方法的约定(例如,参数值不能为负),并且调用者应该自行修复代码或进行一些检查。另一种观点可能是:在某些情况下是否会抛出异常?预期的异常(仍然意味着发生某种错误)将被检查异常,因为这样你就会向调用者传达他应该预期在某些情况下会抛出这些异常(例如,如果数据无效)。如果异常是意外的,你不应该强制调用者处理这样的异常,因为你根本不会指望它被抛出 - 因此它将是一个未经检查的异常。
答案 1 :(得分:1)
根据Joshua Bloch,Book Effective Java,第58项将其汇总在一行中。 Thumb规则是对可恢复条件使用已检查的异常,对编程错误使用运行时异常。