为什么要在try和catch里面抛出两次异常?

来源:1-4 秒杀Service接口实现2

knyel

2017-11-03 17:28

如下图,为什么要在try和catch里面抛出两次异常?红框中的throw是不是可以去掉

http://img1.mukewang.com/59fc36800001216207540399.jpg

写回答 关注

3回答

  • 笑傲独行侠
    2018-02-07 19:18:09
    已采纳

    老师对于异常处理有以下三步:

    1.try catch 将所有的已知的未知的异常全部捕获到后在最后一个catch里,处理转变为spring认识的运行期异常再在方法里抛出,这样spring才会进行事务回滚

    2.由于所有异常都被最后一个catch转化为同一种异常:SeckillException,这样就难以区分到底是哪些业务异常,所以在最后一个catch前加了两个catch把相对应的每一种异常提前抛出

    对于你的问题,如果把前两个catch都去掉,那么前面跑出的异常都会被最后一个catch捕获,进而转化为SeckillException,就不能体现到底具体是哪一种子异常了


    knyel

    非常感谢!

    2018-02-07 21:36:41

    共 1 条回复 >

  • 慕粉2318317165
    2018-01-17 00:00:46

    我也觉得没有必要,既然方法上已经向上抛出了,那就不应该对异常再在方法里做处理了,在方法里直接抛出即可。感觉这块写的有点乱。

  • Wayen999
    2017-11-04 10:16:33

    throw e1:抛出的SeckillCloseException,这是没有更新到记录,秒杀结束的异常。

    throw e2:抛出的RepeatKillException,这是重复秒杀的异常

    这里抛出的两次异常,都是对应不同的处理。

    knyel

    不好意思,我没说清楚,我的意思是try里面已经抛出了一个异常,为什么throw里面又抛出了一次

    2017-11-04 13:28:30

    共 1 条回复 >

Java高并发秒杀API之Service层

Java实现高并发秒杀API,介绍秒杀业务Service层的设计和实现

59897 学习 · 137 问题

查看课程

相似问题