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异常就好),并由上层调用者进行捕获和处理。
作者:高飞
网上有很多关于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异常就好),并由上层调用者进行捕获和处理。
相关文章推荐
- 对java异常处理的一个测试实例
- java异常处理详细介绍及实例
- java异常处理的简单实例和解释,自定义一个异常类
- 理解Java异常处理机制——Java异常处理的一个综合实例
- 理解Java异常处理机制——Java异常处理的一个综合实例
- Java异常处理实例分析
- 从简单实例看JAVA的异常处理机制。
- Java异常处理实例教程
- Java求矩形面积和圆形面积的异常处理实例
- Java异常处理实例教程
- Java异常处理运行时异常(RuntimeException)详解及实例
- Java异常处理实例分析--六种异常处理的陋习
- 理解Java异常处理机制——Java异常处理的一个综合实例
- java--异常处理的实例
- Java总结之异常处理
- IReport 中 java.lang.ClassNotFoundException:...CompilationFailedException 异常的处理
- Java异常处理机制难点解惑-用代码说话
- Java进阶篇(四)——Java异常处理
- 黑马程序员_java异常处理
- Java异常处理机制的秘密