zoukankan      html  css  js  c++  java
  • Java提高:采用异常链传递异常

    一、分析

        异常需要封装,但是仅仅封装还是不够的,还需要传递异常。一个系统的友好型的标识,友好的界面功能是一方面,另一方面就是系统出现非预期的情况的处理方式了。

    二、场景

        比如我们的JEE项目一般都又三层:持久层、逻辑层、展现层,持久层负责与数据库交互,逻辑层负责业务逻辑的实现,展现层负责UI数据的处理。

        又这样一个模块:用户第一次访问的时候,需要持久层从user.xml中读取数据,如果该文件不存在则提示用户创建之,那问题就来了:如果我们直接把持久层的异常FileNotFoundException抛弃掉,逻辑层根本无从得知发生任何事情,也就不能为展现层提供一个友好的处理结果,最终倒霉的就是展现层:没有办法提供异常信息,只能告诉用户“出错了,我也不知道出了什么错了”—毫无友好性而言。

        正确的做法是先封装,然后传递,过程如下:

        1.把FileNotFoundException封装为MyException。

        2.抛出到逻辑层,逻辑层根据异常代码(或者自定义的异常类型)确定后续处理逻辑,然后抛出到展现层。

        3.展现层自行确定展现什么,如果管理员则可以展现低层级的异常,如果是普通用户则展示封装后的异常。

        异常封装如下:    

    1. public classIOException extends Exception{
    2. //定义异常的原因
    3. publicIOException(String message){
    4. super(message);
    5. }
    6. //定义异常原因,并携带原始的异常
    7. publicIOException(String message,Throwable cause){
    8. super(message,cause);
    9. }
    10. //保留原始异常信息
    11. publicIOExcepiton(Throwable cause){
    12. super(cause);
    13. }
    14. }

        链中传递异常代码如下:

    1. try{
    2. //DoSomethind
    3. }catch(Exceptione){
    4. //这种形式也可以叫异常转译,调用者获得该异常后在调用getCause()方法即可获得Exception的异常信息,如此即可以方便查找异常的根本信息,便于解决问题。
    5. thrownew IOException(e);
    6. }

    三、建议

        异常需要封装和传递,我们在进行系统开发的时候,不要“吞噬”异常,也不要“赤裸裸”的抛出异常,封装后在抛出,或者通过异常链传递,可以达到系统更健壮、友好的目的。


    新技术,新未来!欢迎大家关注“1024工场”微信服务号,时刻关注我们的最新的技术讯息!(甭客气!尽情的扫描或者长按!)

  • 相关阅读:
    C结构体中数据的内存对齐问题
    vs2010编译vtk5.8.0 release版本失败的解决方法
    C/C++堆、栈及静态数据区详解 (转载)
    总结一下最近一个月在深圳做的东西
    Stack overflow的问题
    完美的js验证网址url(正则表达式)
    ArrayList,Vector,LinkedList的存储性能和特性
    web程序优化
    巧用 Windows 键盘快捷键
    禁止右键
  • 原文地址:https://www.cnblogs.com/jpfss/p/9456406.html
Copyright © 2011-2022 走看看