Java的异常处理机制具有的优势:
1、给错误进行了统一的分类:通过扩展Exception类或其子类来实现,从而避免了相同的错误可能在不同的方法中具有不同的错误信息,在不同的方法中出现相同的错误时,只需要throw相同的异常对象即可。
2、获得更为详细的错误信息:通过异常类,可以给异常更为详细、对用户更为有用的错误信息,以便于用户进行跟踪和调试程序。
3、把正确的返回结果与错误信息分离,降低了程序的复杂度,调用者无需要对返回结果进行更多的了解。
4、强制调用者进行异常处理,提高程序的质量:当一个方法声明需要抛出一个异常时,那么调用者必须使用try…catch块对异常进行处理,当然调用者也可以让异常继续往上一层抛出。
Checked 异常 还是 unChecked 异常?
倒底什么时候使用checked异常,什么时候使用unChecked异常?并没有一个绝对的标准,但有一些建议:
1、如果一个异常是可以恢复的,可以被调用者正确处理的,使用checked异常。
2、当所有调用者必须处理这个异常,可以让调用者进行重试操作,或者该异常相当于该方法的第二个返回值,使用checked异常。
3、这个异常仅是少数比较高级的调用者才能处理,一般的调用者不能正确的处理,使用unchecked异常;有能力处理的调用者可以进行高级处理,一般调用者干脆就不处理。
4、这个异常是致命的,不可恢复的,或者调用者去捕获它没有任何益处,使用unchecked异常。
5、这个异常是一个非常严重的错误,如数据库连接错误,文件无法打开等,或者这些异常是与外部环境相关的,不是重试可以解决的,使用unchecked异常。因为这种异常一旦出现,调用者根本无法处理。
6、如果不能确定时,使用unchecked异常,并详细描述可能会抛出的异常,以让调用者决定是否进行处理。
7、在使用unChecked异常时,必须在在方法声明中详细的说明该方法可能会抛出的unChekced异常,由调用者自己去决定是否捕获unChecked异常。
异常的记录
1、异常应该在最初产生的位置记录。
2、如果捕获到一个异常,但是这个异常是可以处理的,则无需要记录异常。
3、捕获到一个未记录过的异常或外部系统异常时,应该记录异常的详细信息。
4、最好是为系统提供一个异常处理框架,由框架来决定是否记录异常和怎么记录异常。