只针对异常的情况才使用异常
不要将它用在普通的控制流上,比如遍历数组请不要使用以下方式:
try {
int a[] = {1,2,34,5};
int i = 0;
while(true){
System.out.println(a[i++]);
}
} catch (ArrayIndexOutOfBoundsException e) {
e.printStackTrace();
}
对可恢复的情况使用受检异常,对变成错误使用运行异常
原则:如果期望调用者能够适当的恢复,应该使用受检异常。
避免不必要的使用受检异常
过分使用受检异常会使得api使用起来非常不方便。
优先使用标准(常用)的异常
好处:
1.大多数为我们熟悉的异常,易于学习和使用。
2.可读性高。
3.异常类少,内存印迹就越小,装载异常类的时间开销就越小。
抛出与接口相对应的异常
支持链、异常链、异常转译
每个方法抛出的异常都要有文档
在javaDoc中使用@throws来说明异常。
在细节消息中包含能捕获失败的信息
为了捕获失败,异常的细节消息应该包含所有对该异常有贡献的参数和域的值。
努力使失败保持原子性
原则:对象调用一个失败的方法,该对象要保持在调用该方法之前的状态。
保持失败原子性的方法:
①将对象设计为不可变类。
②在调用方法之前先检查参数的有效性。
不要忽略异常
请不要使用try/catch来捕获异常,除非你知道异常不会影响到系统。