finally作为异常处理的一部分,被finally关键字包围的语句一定会执行(多用于资源释放),除非finally之前有退出。
finally之前有return语句,程序的运行流程:
public class ExceptionDemo {
/**
* @param args
*/
public static void main(String[] args) {
System.out.println(show());
}
public static int show(){
int a = 1;
try{
System.out.println(a/0);
a = 2;
}catch(Exception e){
a = 3;
return a;
}finally{
a = 4;
}
return a;
}
}
在上述catch语句中,有return a; 由于有finally语句结构,所以会先执行finally中的语句,此时,虽然a已经变成4,但是最终return语句还是执行的是catch中的return,那么结果为何是3呢?反编译后我们发现,程序执行至catch语句时,return a; 已经变为 return 3。所以即使执行过finally中的语句后,最终返回结果还是3.