首先声明这确实是一个比较低级的问题,原因在于对finally块的理解不够。
当你在finally块中使用了return 语句时,
IDEA 会提示
‘finally’ block can not complete normally
Eclipse会提示
finally block does not complete normally
- 首先要明确的是,无论你之前的try块还是catch块中是否含有return 语句,finally块都会执行。
- 其次如果finally 块中也有return语句的话,那么之前的try 块和catch 块中的return语句会被覆盖掉,也就是不会执行,这也是IDE报提示警告的主要原因。
- 如果finally块中包含了return语句,即使前面的catch块重新抛出了异常,则调用该方法的语句也不会获得catch块重新抛出的异常,而是会得到finally块的返回值,并且不会捕获异常。
因此,我们应当避免在finally块中包含return语句。