异常处理之总结一

要点:

1.方法可在运行期间遇到问题时抛出异常。

2.异常是Exception类型的对象。

3.编译器不会注意RuntimeException类型的异常。RuntimeException不需要声明或被包在try/catch块中(然而你可以这么做)

4.编译器所关心的是称为检查异常的异常。程序必须要认识有异常可能的存在。

5.方法可以用throw关键字抛出异常对象:

  throw new FileIsTooSmallException();

6.可能会抛出异常的方法必须声明为throws Exception.

7.如果程序调用了有声明会抛出异常的方法,就得告诉编译器已经注意到这件事。

8.如果要处理异常状况,就把调用包在try/cathch块中,并将异常处理/恢复程序放在catch块中。

9.如果不打算处理异常,还是可以正式的将异常给ducking来通过编译。

异常处理规则:


 1.catch和finally不能没有try。

      void go(){

                  Foo f = new Foo();

                 f.foof();

               catch(FooException ex){ }

}


2.try和catch之间不能有程序。

 try{

     x.doStuff();

    }

int y = 43;//即此处不能有程序

}catch(Exception ex){  }


3.try一定要有catch或finally.

try{

   x.doStuff();

}finally{

   //清理

}


4.只有带finally的try必须要声明异常。

  void go()throws FooException{

   try{

         x.doStuff();

    }finally{    }

}

以下 15 条异常处理的原则来自国外的博客

  1. 不用使用异常来管理业务逻辑,应该使用条件语句。如果一个控制逻辑可通过 if-else 语句来简单完成的,那就不用使用异常,因为异常会降低代码的可读性和性能,例如一些 null 的判断逻辑、除0的控制等等;

  2. 异常的名字必须清晰而且有具体的意思,表示异常发生的问题,例如 FileNotFoundException 就很清晰直观

  3. 当方法判断出错该返回时应该抛出异常,而不是返回一些错误值,因为错误值难以理解而且不够直观,例如抛出 FileNotFoundException 异常,而不是返回 -1 或者 -2 之类的错误值。

  4. 应该捕获指定的异常,而不是 catch(Exception e) 了事,这对性能、代码的可读性以及诸多方面都有好处

  5. Null 的判断逻辑并不是一成不变的,当方法允许返回 null 的时候使用 if-else 控制逻辑,否则就抛出 NullPointerException

  6. 尽量不要二次抛出异常,如果非得这么做的话,抛出同一个异常示例,而不是重新构建一个异常对象,这对性能是有帮助的,而且外层调用者可获取真实的异常信息

  7. 定义你自己的异常类层次,例如 UserException 和 SystemException 分别代表用户级别的异常信息和系统级别的异常信息,而其他的异常在这两个基类上进行扩展

  8. 明确的使用不同的异常类型:
    Fatal: System crash states. 
    Error: Lack of requirement. 
    Warn: Not an error but error probability. 
    Info: Info for user. 
    Debug: Info for developer. 

  9. 不要仅仅捕获异常而不做任何处理,不便于将来维护

  10. 不要多次重复记录同一个异常,这可以让我们清晰的了解异常发生的位置

  11. 请使用 finally 来释放一些打开的资源,例如打开的文件、数据库连接等等

  12. 大部分情况下不建议在循环中进行异常处理,应该在循环外对异常进行捕获处理

  13. 异常的粒度很重要,应该为一个基本操作定义一个 try-catch 块,不要为了简便,将几百行代码放到一个 try-catch 块中

  14. 为你的异常生成足够的文档说明,至少是 JavaDoc

  15. 为每个异常消息定义一个数值,这对好的文档来说是非常重要的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值