一个程序是否优秀健壮,很大程度决定于对异常情况的设计和考虑。从这个角度来讲,异常处理的重要性,丝毫不低于正常的业务流程代码开发。本专题将从实践中总结到多种涉及到异常相关的经验,予以分享。
二、异常和程序容错
在实际业务场景中,往往需要批量处理一类对象,如处理多个网络连接等。这个时候,程序的健壮性,除了考虑到捕获到程序的异常,同时也要避免不要让异常干扰到正常的业务流程。如下代码的fun1方法,由于在循环体外捕获异常,从而导致了后面正常的业务不能执行。而fun2,则当发生异常后,进行一定的异常处理,同时,由于是在循环体内进行捕获,不会影响其他正常对象的执行。
import java.util.Arrays;
import java.util.List;
public class Demo1 {
public static void main(String[] args) {
fun1();
System.out.println("===================================");
fun2();
}
//在循环外捕捉异常,从而导致如果中间发生异常,正常的无法继续。
public static void fun1(){
List<Job> jobs= Arrays.asList(new Job(1),new Job(2),new Job(),new Job(3),new Job(4),new Job(5));
try {
for (Job job : jobs) {
job.work();
}
}catch (Exception e){
System.out.println(e.getMessage());
}
}
//在循环内捕捉异常,异常的不会影响到正常的
public static void fun2(){
List<Job> jobs = Arrays.asList(new Job(1), new Job(2), new Job(), new Job(3), new Job(4), new Job(5));
for (Job job : jobs) {
try {
job.work();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}
public class Job{
int a=0;
public Job(){};
public Job(int a){
this.a=a;
}
void work() {
if(a==0){
throw new RuntimeException("不允许出现0值");
}
System.out.println("第"+a+"个在工作");
}
}