工作中异常处理非常重要。原因是若没有捕获处理异常,那么大型的软件程序未按照预期执行或发生错误时,就难以准确定位故障原因。所以在项目中除了写好简洁的业务逻辑处理代码,还有就是写好详略得当的异常捕获、处理。
1. Java异常类型
Java的异常也是按照继承的方式来实现的。
异常超类是Throwable(继承自Object),有2个实现类,分别是Error和Exception。其中Error为编译和系统错误(一般如忘记导入包会出现RuntimeError),Exception为异常,比较常用,有运行时和检查时2种情况。
第一种,运行时异常就是程序未按照正常运行,中途中止,就会在控制台或日志打印如下字段:
然后我们根据发生位置来确定代码问题。
第二种,检查时异常,一般在使用连接数据库、JavaIO时出现,编译器一般会强制用户捕获,否则编译不通过,如下图:
如果不捕获异常,那么编译器就会直接报错。
2. Java异常处理方式
一般的我们对可能抛出异常的代码或者强制捕获代码有2种处理方法。
第一种,使用try-catch,结构如下:
try{
//code
}catch(ExceptionType e){
//e.printTrace();
}
在JavaIO中还会使用try-catch-finally结构来释放资源,finally块中的代码一定会执行并且也会抛出异常。
第二种,使用throws-throw,一般的用在分层程序中,下层抛出异常,由上层统一处理,如在Dao中throws抛出异常,在service层统一使用上述第一种处理方式捕获处理。throws关键字写在方法名,来罗列该方法可能抛出的所有异常,throw用在具体方法中抛出具体的异常如:
throw new ArrayIndexOutOfBoundaryException();向外抛出异常,不处理。
注意:
使用第一种方式时,要合理的排布catch语句,因为一旦异常被捕获,便不再向下比对catch。比如:
Int []nums=new int[2];
try{
Int temp=nums[3];
}catch(Exception e){
e.printTrace();
}catch(ArrayIndexOutOfBoundaryException e){
e.printTrace();
}
异常被Exception的catch捕获,而不会传递到ArrayIndexOutOfBoundaryException的catch中,即子类的异常可以被超类捕获,但是这样会丢失异常具体信息,所以在顺序上使用子类异常到超类异常的排序方式,可以尽可能的减少异常信息丢失。
使用第二种方式处理异常时,一定要确保抛出的层次处理该异常,否则会将异常传递到main方法中,导致未处理。
3. 自定义异常
Java提供了很多常用的异常如下图所示,但是这些异常并不能满足所有用户的需求,所以我们可以通过自定义的方式实现异常,满足业务需求。
下图是我自定义的异常,自定义异常需要继承异常的超类Exception,可以根据自己的需要添加成员属性,注意在创建空参构造方法时需要调用super(将参数传递给超类构造方法)。这样就可以在try-catch模块中使用自己定义的异常来替换原有类型了。
4. 总结
Java的异常处理增强了程序的可读性和维护性,因为逻辑代码与异常处理是相互分离的而非混杂的方式,使我们可以集中精力处理要解决的问题。最近正在学习当中,对异常的理解深度有限,在后续的工作中,有新的理解和认识会继续总结。
by:HW-ZYD





































苏公安网备 32011402010933号