所谓"异常处理中的finally语句块不执行,若try 中有return语句提前返回“,只是一个假象,其实java 还是会执行finally内语句的,如:- class Test
- {
- public static void main(String[] args)
- {
- System.out.println("return: "+fun());
- }
- static int fun()
- {
- int i = 1;
- try
- {
- return i;
- }
- finally
- {
- ++i;
- // System.out.println(i);
- // return i;
- }
- }
- }
复制代码 return: 1, 好像finally内的“++i”没执行,只是个错觉,取消finally内的那两个注释语句,你就会恍然大悟了!那为何之前“return: 1”?这是java 执行机制的问题,因try 已返回“1”,虽然后面会执行finally内的“++i”,但不会追溯之前送出的 i:1。 |