注意事项
1. 确保状态码有一个正确值。若有finally子句,则不要在try块中直接返回,亦不要在finally中直接返回。
2. 尽可能地处理异常,如果无法在的代码中完成处理,函数定义时声明异常, 异常处理的关键是识别特定的异常
3. 尽量使用标准异常,如IllegalArgumentException . NullPointerException IndexOutOfBoundsException
4. 不要使用覆盖式异常处理块,该代码的基本结构如下所示:
try{
//…
}catch (Exception e){
//...
}
使用覆盖式异常处理块有以下两个前提之一:
a) 代码中只有一类问题。这可能正确,但即便如此,也不应使用覆盖式处理,捕获更具体的异常形式有利无弊。
b) 单个恢复操作始终适用。这几乎绝对错误。几乎没有哪个方法能放之四海而皆准,能应对出现的任何问题。
异常策略
service扩展BaseException实现自己需要的exception。当下层出现异常时,扔到service中,service对异常处理,并使用自定义异常包装,传给action,输出相应信息
下层不可以处理的异常,抛给上层;被调用函数抛给调用者
异常与返回值的区别
异常主要对不可预测的状态进行处理,如 数据库连接,网络连接等, 对于参数错误,可以抛出 IllegalArgumentException
如果需要传递错误原因,请使用异常
控制程序结构使用返回值,而不是异常