文档开发者中心
我的

java异常分析与处理

工作中异常处理非常重要。原因是若没有捕获处理异常,那么大型的软件程序未按照预期执行或发生错误时,就难以准确定位故障原因。所以在项目中除了写好简洁的业务逻辑处理代码,还有就是写好详略得当的异常捕获、处理。


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

点赞
收藏
回复
分享
举报
浏览277 编辑于2019-08-27 07:48未知归属地
全部评论
最多点赞
最新发布
最早发布
暂无评论
暂无评论
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

了解社区公约,与您携手共创和谐专业的开发者社区。