java 异常类型

检测异常(CheckedException)

Java中所有不是RuntimeException派生的Exception都是检查型异常
当函数中存在抛出检查型异常的操作时该函数的函数声明中必须包含throws语句。调用改函数的函数也必须对该异常进行处理,如不进行处理则必须在调用函数上声明throws语句。
包括IOException,SQLException 等。

非检查型异常(UncheckedException)

UncheckedException == RuntimeException的派生类 。与检查型异常相对抛出非检查型异常可以不在函数声明中添加throws语句,调用函数上也不需要强制处理。
包括NullPointException,ArrayIndexOutOfBoundsException, ClassCastException 等。

不同之处

  • 方法签名是否需要声明exception
  • 调用该方法时是否需要捕获exception
  • exception产生的时候JVM控制程序的状态

异常处理原则

  1.  为可恢复的条件使用检查型异常,为编程错误使用运行时异常
  2. 仅处理当前可处理的异常。
  3.  对所有的检查型异常使用异常转译。
  4.  所有的自定义异常都是非检查型异常。
  5.  异常流程与正常流程进行分离,并尽可能的统一处理。
  6.  在非异常处理模块的catch块中尽可能不记日志。
  7.  除非是进行资源释放操作,否则catch块不应为空或者出现e.printTrace
  8.   finally块中不能出现复杂的操作,且不可以抛出异常,也不可以出现return。

处理异常的一般方式

  1. 将throw语句视为异常流程的起点,将Exception对象视作正常流程向异常流程跃迁过程中的数据载体。
  2.  建立统一的自定义异常类型,用于包装所有检查型异常。
  3.  大多数情况下仅在程序的主干上建立唯一的异常捕获点,并在这个点上对接收到的异常进行处理。

       
赞 (0) 评论 分享 ()