以往认为函数只要执行到return语句便会返回结果并终止,然而这时错误的,因为这存在特例。
掌握下面几条原则就可以完全解决“当try、catch、finally遭遇return”的问题。
原则:1、finally语句块中的代码是一定会执行的,而catch块中的代码只有发生异常时才会执行。
2、 函数执行完try块中的return语句后不会终止,还会继续执行catch(仅在抛出异常时执行)、finally语句块。
3、函数必须确保有唯一返回值
说明: try中如果包含return语句则catch块和finally块中必须至少有一个含有return语句。或者try中通过throw new Exception();抛出异常,则catch与finally中至少有一个return语句。因为try块会假定其中发生异常,且try块中的代码要么顺利执行,要么抛出异常。如果只在try块中包含return语句不能保证函数有返回值(如try抛出时,return语句不会执行)。所以为了保证函数具有返回值,java强制要求原则。
4、return语句的优先级是finally最大,且try与catch块中只有两者之一的return语句会被执行。为保证函数只有一个返回值则返回优先级最大的值。
下面通过例子讲解上面的三条原则
结果:
try1
finally4
4
说明:try中执行完输出后,由于其return优先级并不最高,所以不会返回,继续执行finally语句块并返回
结果:
catch2
finally5
5