我们看一个典型的使用异常返回错误信息的例子,如下图:
整段代码读下来行云流水,表意也很准确,但是有什么影响?
在谈影响前,我们先看下jvm对异常的处理流程,如下:
【图是同事从网上找的哈,借用一下】
【以下是异常处理原理】
我们能看到每个方法被编译完后,会有一个对应的异常表(Exception table)
异常表中每条记录都包含从from开始到to结束这段代码会报一个什么类型的异常,target是异常处理的起始地址指向
代码在运行过程中异常发生后,会从异常表中遍历所有的异常记录,看看当前发生异常的代码行处于上面那个【from,to】区间,找到后再执行对应的异常处理过程
【解释】
从这里能看到,如果程序整个顺利执行下来时,try..catch..finally对整个程序都没有任何影响,但是一旦异常发生后需要处理异常过程,如果异常表里面的内容过多,遍历的次数也会更多,从而性能就是从这里开始损耗。
【结论】
建议是所有的代码如果能够通过枚举值+描述的方式返回信息的就尽量按照这个方式来,而异常基本用在系统抓到意外的情况并且系统还没有办法知道该如何处理的场景。