评:语义上 finally 在return之后执行 
以前虽然知道在try finally语句中,即使try块里有return语句,finally语句也会在return语句执行之前执行,却不知道return表达式与finally语句的执行顺序。 
public class Test { 
 public static int a() { 
 int i = 0; 
 try { 
 i++; 
 return ++i; 
 } finally { 
 i++; 
 [b]System.out.println("finally:" + i);[/b] 
 } 
 } 
 public static void main(String[] args) { 
 System.out.println(a()); 
 } 
}
这个语句的输出是 2 而不是 3。 
当执行到 return ++i; 
jvm是先执行 ++i,把结果 2 存到临时变量,然后在执行finally语句里的 ++i,所以最终的i的值虽然是 3,但方法返回的值却是 2。 
其实以前的理解没有错,因为 return ++i; 是一个复合语句了,相当于: 
 
int j = ++i; 
 return j;










