您的位置:首页 > 编程语言 > Java开发

java异常处理实例

2008-06-02 23:21 309 查看
转载请注明出处:http://blog.csdn.net/soartju

作者:高飞

网上有很多关于java异常的文章,大概都只讲了java异常的基本概念,如什么是checked异常,什么是运行时异常,但并没有讲解如何使用异常的文章,正好最近实际编写email接收解析,用了些自定义的异常,记下来留以后查阅。

先说下异常类型。所谓的checked异常,是指程序员必须捕获或抛出的异常,因为想不这样都不行,如果在eclipse IDE中,这种异常不处理,根本就编译不通过。非checked异常则是不需要程序员处理的异常,基本上出现这种问题,是程序本身有问题,有必要好好查查程序。

这次的部分工作是进行Email的解析,然后将解析后的数据保存。在Email的解析过程中,很可能出现必填数据缺失的问题,实际上这就是一种异常情况。这种异常是可以预期的,所以我们有必要用checked异常进行处理,主动抛出checked异常,以告诉程序,必要的数据缺失,需要处理。处理的方式就看我们的业务逻辑了,我们这里是给用户发错误提示邮件。

看下代码吧,仅仅写了关键的示例代码,不过不会影响理解。

ReportService.java

public class ReportService { public static void parseAndSave(EmailMessage em) { try { Report report = new EmailParser().parse(em); //会抛出RequiredFieldNotFillException,这是一个自定义的异常,表示必填数据没有填写异常 EmailDao.save(report); } catch (RequiredFieldNotFillException e) { //捕获了这个异常,这里我们的处理方式是给用户发送错误提示邮件 // 发送错误邮件告知用户 EmailUtil.sendErrorMail(); } } }

EmailParse.java //解析自定义的EmailMessage

public class EmailParser { public Report parse(EmailMessage em) throws RequiredFieldNotFillException{ if(em.getUser() == null || em.getUser().equalsIgnoreCase("")){ //如果必填字段为空,则主动抛出异常,由上层调用方法捕获并进行处理 throw new RequiredFieldNotFillException("user必填项没有填写"); } return EmailUtil.getReport(em); } }



示例程序说明:

EmailParser的parse()方法中,会判断必填字段是否为空,如果为空,会主动抛出RequiredFieldNotFillException,这就是checked异常,由于我们希望调用这个方法的上层方法来处理这个异常,因此将方法声明为Report parse(EmailMessage em) throws RequiredFieldNotFillException。这样上层的ReportService在执行parseAndSave()方法时,由于调用了EmailParser的parse(),因此必须捕获RequiredFieldNotFillException,同时我们在catch中处理该异常,发送错误提示邮件给用户。这样就完成了这个预期的异常的捕获,保证不至于破坏数据的完整性。

当然,也可以在捕获RequiredFieldNotFillException后,继续捕获Exception,当捕获到Exception异常时,则是我们没有预期到的异常,很可能是程序出了问题,我们可以给用户发送一个系统异常提示邮件。

总结:

从这个例子可以看出,当异常可以预期时,应该主动抛出checked异常(尽量用java自带checked异常就好),并由上层调用者进行捕获和处理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: