Java throw exception时需要重点关注的事情!
引言
由于线上报错,排查错误时,发现抛出的是一个自定义异常,本来想根据自定义异常行数快速定位,结果发现这个异常定位行数根本就不是抛出异常的地方,到底是怎么回事呢。
场景复现
简单复现,我们就不实现自定义异常了,使用已经有的。
代码如下,可以猜测一下抛出的异常会是多少行,是20嘛,nonono
源码:
public static void main(String[] args) {String flag = "2";UnsupportedOperationException exception = new UnsupportedOperationException();if("1".equals(flag)){throw exception;}if("2".equals(flag)){throw exception;}if("3".equals(flag)){throw exception;}}
让我们看一下结果,没有错出乎意料吧,13行,不是throw的行数,是初始new exception的行数。
结论
由于可能多个判断条件下,需要抛出相同的自定义异常,并且自定义异常被我们套的层级及命名都显得过长等等原因。不经意间就想着先通过一个引入把exception先定义出来。后面对应位置在throw。
但是这种行为对自己编码友好了,但是对于排错的人!相当于没有任何提示。还是要一行一行代码看。
所以我们一定要throw的时候,重新new 相应的exception。报错行数就是我们new excetion的行数!!!!