每个程序员都希望自己的程序稳定运行,不要隔三岔五出什么差错,可是程序运行时冒出来的各种异常着实烦人,令人不胜其扰。虽然可以在代码中补上try/catch语句捕捉异常,但毕竟属于事后的补救措施。与其后知后觉地亡羊补牢,不如一开始就未雨绸缪,只要防患于未然,必能收到事半功倍的成效。
就编码时的常见异常而言,绝大多数异常都能通过适当的校验加以规避,也就是事先指定可让程序正常运行的合法条件,只有条件满足才开展业务逻辑处理,否则进行失败情况的处理。这样用于异常捕捉的try/catch语句便转换为了条件分支的if/else语句,对于熟能生巧的if/else流程控制,想必程序员在编码时更能游刃有余。接下来以几个常见的异常为例,阐述一下如何预防这些异常的发生。
首先看最简单的算术异常,如果是除数为零的异常,检查一下除数的值是否为零就行了。如果是大小数除法运算遇到的“商为无限循环小数”异常,就得在调用divide方法之时指定本次除法运算的小数精度,以及精度范围最后一位数字的舍入方式。下面是优化后的大小数除法代码例子:
// 测试算术异常:商是无限循环小数
private static void testDivideByDecimal() {
BigDecimal one = BigDecimal.valueOf(1);
BigDecimal three = BigDecimal.valueOf(3);
// 大小数的除法运算,小数点后面保留64位,其中最后一位做四舍五入
BigDecimal result = one.divide(three, 64, BigDecimal.ROUND_HALF_UP);
System.out.println("sqrt result=" + result);
}
其次看数组越界异常&#