public class Test{
public static int t<span style="font-family: Arial, Helvetica, sans-serif;">estFinally</span>(){
int i =0;
try {
i=i+2;
System.out.println("try "+i);
return i;
} catch (Exception e) {
// TODO: handle exception
return 0;
}finally{
System.out.println("finally "+i);
return i;
}
}
public static void main(String[] args){
System.out.println(testFinally());
}
}
try 2
finally 2
2
由于程序执行return语句就意味着结束当前函数的调用并跳出这个函数体,因此在任何语句要执行都只能在return前执行(除非碰到exit函数),因此finally块里的代码也是try、catch里的return语句前执行。此外try-finally和catch-finally中都有return,那么finally块中的return语句将会覆盖别处的return语句,最终返回到调用着那的是finally里return的值。