什么时候抛异常什么时候捕捉异常?

之前面试遇到这样一个问题,异常有两种处理方式,一种是直接捕捉try catch,一种是直接往外抛throws,那么这两种方式都是什么情况下使用呢

当时一下没反应过来,工作中大多数都是直接捕获,后面才了解到首先你要弄清楚这个功能的位置:

  • 如果这个方法没有人调用,则一定要捕捉不然就抛到jvm来处理了(比如Controller层一般都是要对异常进行捕捉,该打日志的打,该抛前台的抛)
  • 有其他调用者要使用你这个方法,如果这个异常信息是不需要让调用者知道的就直接捕获,比如时间转换用到SimpleDateFormat则可以直接捕获异常
  • 但如果这个异常调用者是需要知道的就要抛出去让调用者去处理,比如controller层调service业务层,如果业务层逻辑处理失败是需要拿到他失败的原因方便运维,这种情况就要抛异常

对于service层如果有对数据库进行增删改操作的一般会有事务管理,这个时候异常就不能随便捕捉了,不然就会影响事物的回滚(或者捕捉后再抛一个自定义异常)

猜你喜欢

转载自www.cnblogs.com/chenglei0718/p/11407447.html