java封装异常_异常封装提高Java代码质量

在学习编程的过程中,我觉得不止要获得课本的知识,更多的是通过学习技术知识提高解决问题的能力,这样我们才能走在最前方,本文主要讲述异常封装提高Java代码质量,更多Java专业知识,广州疯狂java培训官网与你分享;

一、分析

Java语言的异常处理机制可以确保程序的健壮性,提高系统的开发效率,但是Java

API提供的异常都是比较低级(这里的低级指的是"低级别的异常"),只有开发人员才能看的懂,才明白发生了什么问题。对于终端用户来说,这些异常基本上是天书,与业务无关,是纯计算机语言的描述。

这就需要我们对异常进行封装了。

二、场景

异常封装有三方面的优点:

1.提高系统的友好性

例如,打开一个文件,如果文件不存在,则会报FileNotFoundException异常,如果该方法的编写不做任何处理,直接上抛上层,则会降低系统的友好性,代码如下所示:

[java]

public static void doStuff()throws Exception{

InputStream is = new FileInputStream("无效文件。txt");

}

此时doStuff方法的友好性极差:出现异常时(比如文件不存在),该方法直接把FileNotFoundException异常抛出到上层应用中(或者是终端用户),而上层应用(或用户)要么自己处理,要么接着抛出,最终的结果就是让用户对着"天书"式的文字发呆,用户不知道这是什么问题,只是系统告诉他"哦,我出错了,什么错误?你自己看着办吧".

解决办法就是封装异常,可以把系统的阅读者分为两类:开发人员和用户。开发人员查找问题,需要打印出堆栈信息,而用户则需要了解具体的业务原因,比如文件太大,不能同时编写文件等,代码如下:

[java]

public static void doStuff2()throws MyBussinessException{

try{

InputStream is = new FileInputStream("无效文件。txt");

}catch(FileNotFoundException e){

//为了方便开发和维护人员而设置的异常信息

e.printStackTree();

//抛出业务异常

throw new MyBussinessException(e);

}

}

2.提高系统的可维护性

[java]

public void doStuff(){

try{

//do something

}catch(Exception e){

e.printStackTrace();

}

}

这是很多程序员容易犯的错误,抛出异常是吧?分类处理多麻烦,就写一个catch块来处理所有异常吧。而且还信誓旦旦的说"JVM会打印出栈中的错误信息",虽然这没有错,但是该信息只有开发人员自己才看的懂,维护人员看见这段异常基本上无法处理,因为需要深入到代码逻辑中去分析问题。

正确的做法是对异常进行分类处理,并进行封装输出,代码如下:

[java]

public void doStuff(){

try{

//do something

}catch(FileNotFoundException e){

log.info("文件夹未找到,使用默认配置文件…");

}catch(SecurityException 3){

log.info("无权访问,可能原因是…");

e.printStackTrace();

}

}

如此包装后,维护人员看到这样子的异常就有了初步的判断,或者检查配置,或者初始化环境,不需要直接到代码层级去分析了。

3.解决Java异常机制自身的缺陷

Java中的异常一次只能抛出一个,比如,doStuff方法有两个逻辑代码片段,如果在第一个逻辑片段中抛出异常,则第二个逻辑片段就不执行了,也就无法抛出第二个异常了。那么如何才能一次抛出两个异常呢?

其实,使用自行封装的异常可以解决问题,代码如下:

[java]

class MyException extends Exception{

//容纳所有异常

private List causes = new ArrayList();

//构造函数,传递一个异常列表

public MyException(List

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值