Java中异常类的编写

在我们系统中我们经常需要编写自己的异常类,那我们应该如果编写呢?今天我们就来看一下,话不多说上个类图展示一下

java的异常类设计


Throwable是异常类的祖先,提供了异常类的基本的获取错误栈的深度,获取错误栈元素的本地方法,错误栈打印,序列化,message获取,Throwable的实例cause的获取,其中最重要的错误栈打印调用的为本地方法:

private native Throwable fillInStackTrace(int dummy);

Error与Exception功能实现都是一样的,只是使用场景稍有不同

Error一般用于永远都不应该发生的错误,如jvm异常崩溃,资源耗尽等,这些应该再设计系统时进行评估给足资源,还有就是jvm的异常崩溃退出在程序运行时永远不会发生,而且Error在编译期间编译器是不会进行检查的,因为永远不应该发生Error,所以程序中也不应该对Error进行捕捉或者继续抛出。


Exception为应用程序需要捕捉的错误,非RuntimeException子类下的Exception如果希望能够被抛出的话需要在方法前抛出此异常方法前加上throws ,此类exception称为checked exceptions

checked exception是必须要被处理的,即A方法抛出check exception,B方法调用了A方法,那么B必须要捕捉或者继续抛出

而继承了RuntimeException的异常希望抛出的话是不需要throw的,RuntimeException称为unchecked exceptions

unchecked exceptions一般是不强制调用者捕捉或者继续抛出,可以不用处理,因为此类错误一般是由于程序设计的问题产生的

nullpointexception,IndexOutOfBoundsException,java.lang.ArithmeticException: / by zero


总结存在3中异常类

  1. Error
  2. Exception(非RuntimeException)
  3. RuntimeException

Error一般用在永远不会出现的错误

RuntimeException一般用于表示由于程序设计漏洞产生的错误

Exception(非RuntimeException)表示流程类的错误类

所以在我们的日常使用中可以使用Exception(非RuntimeException)的情况会居多

一般的写法为

实现Exception重载的几种构造函数即可

编写error与RuntimeException也差不多


异常类的设计

RumtimeException     为隐性向上抛出的特性

非RumtimeException 则为显性的向上抛出

这里的隐性与显性是我借用生物遗传中的隐性与显性;具体就是隐性不需要调用者进行声明向上抛出或者捕捉,而显性则需要显。

这里多说一句如果 @Transactional 没有设置rollbackForspring属性的事务回滚只支持RumtimeException

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章