finally
finally作为异常处理的一部分,只能在try/catch语句中,并且附带一个语句块,标识这段语句最终一定被执行,经常用在释放资源的情况下。
关于finally的执行顺序——JVM规范中有:如果try语句里面有return,那么先将值保存到局部变量中,然后执行finally语句,返回之前保存在局部变量中的值。
public int func() {
int x = 1;
try {
return ++x;
} catch (Exception e) {
} finally {
++x;
}
return x;
}
这个函数的返回结果是:2
当然,如果finally块中有return语句,则会执行finally中的return将会覆盖其他return语句。
public static void main(String[] args){
System.out.println(testFinally());
}
public static int testFinally(){
try {
return 1;
}catch (Exception e){
return 0;
}finally {
System.out.println("finally");
return 3;
}
}
运行结果为:
finally
3