try catch块的秘密

最近有同事遇到问题:

她在4处手动抛运行异常,5处存在return语句,结果程序在2出现异常时没有抛出运行异常,导致事务不一致.

我们都知道,当程序出现异常时候并且在不采取任何措施的情况下,是会抛出异常并停止方法的.在catch中手动

抛运行异常也是会结束程序的,这两种情况都会触发springAOP的事务回滚,但为什么会出现这种情况呢?

讨论研究了之后才明白,原因是当如果要抛运行异常时,程序就会立马结束,无法执行finally,而finally是必须要执行的

所以,程序设定catch中的异常是执行完finally后才执行,所以,finally中有return就不会返回去

执行抛异常的操作了,同理,当catch中有return halloWord("小名")的时候是会先执行halloWord("小名"),等执行完

finally后才将halloWord("小名")的结果返回,最后结束.

原文地址:https://www.cnblogs.com/macwhirr/p/7358924.html