用代码证明,在try中写了return,后面又写了finally,是先执行return还是先执行fianlly?
public class Test7 {
public static void main(String[] args){
System.out.println(test());
}
//自定义一个test测试函数
public static boolean test(){
try{
//用来检测try块里面处于return前的语句是否有被执行
System.out.println("执行的是try");
return false;
}
finally{
//用来检测finally语句块中的语句有没有被执行
System.out.println("执行的是finally");
//return true;
}
}
}
/*程序最后运行的结果是:
执行的是try
执行的是finally
true
通过程序的运行结果可以看出,try中的return语句并没有被执行。
如果我注释掉finally语句块中return语句,程序的运行结果又会是什么样的呢?
[java] view plaincopy在CODE上查看代码片派生到我的代码片
执行的是try
执行的是finally
false
通过这两个运行结果的不同,我们不难得出结论
当java程序在执行try块、catch块时如果遇到了return或者throw时,这两个语句都会导致该方法立即结束,但是系统在执行这两个语句时并不会结束该方法,而是去寻找该异常处理流中是否包含了finally语句块,如果没有finally块,则程序会立即执行return或者throw语句,方法终止。如果有finally语句块,系统会开始立即执行finally语句块,只有当finally语句块中的代码被执行完了之后,系统才会回来再次执行try块或者catch块中的return或throw语句,但是如果finally块中也有return或者throw这样能是方法结束的语句,则finally块就会立即结束该方法,系统将不会跳回去执行try块或者catch中的任何语句。
所以在注释掉finally块中的return语句后,程序再次跳到了try中的return语句,最后结果返回了false。
}
*/
|
|