简述
在Java代码规范中,通常要求避免在finally代码块中写return代码,在大多公司的安全规范中也会禁止此类代码书写。具体的原因可以从下面几点来说明:
1、finally中如果有return代码,即使try和catch中有return,也会执行finally。
2、finally中的return执行完后,程序结束,导致try和catch中的return代码失效。
请记住,除非遇到try或者catch中出现死循环或者jvm宕机的极端情况,否则finally中的return代码永远会被执行。
举例
举个例子,如下代码:
执行的结果如下:
可见最终的返回结果是10。那么如果在try中抛出异常的情况下,代码会怎么走呢?
执行的结果如下所示:
可以看到,我们在catch捕捉了异常并正常打印出来,但是catch中的return也并未执行,最终决定返回值的还是finally中的return值。
结论
1、finally中的return代码永远会被执行,极端情况除外。
2、我们在日常的代码规范中不可在finally中写return代码。
3、在日常的业务逻辑处理中,根据逻辑判断将返回值写到try或者catch中,在最后的finally之外进行返回,不可代码中好几处地方进行return,容易产生逻辑错误。