try 块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
catch 块:用于处理try捕获到的异常。
finally 块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。在以下4种特殊情况下,finally块不会被执行:
1)在finally语句块中发生了异常。
2)在前面的代码中用了System.exit()退出程序。
3)程序所在的线程死亡。
4)关闭CPU。
测试:当在try块或catch块中遇到return语句时,finally语句块将在方法返回之前被执行。被覆盖
package demo;
public class He {
private static int show() {
int a = 0;
try {
int i=1/0;
} catch (Exception e) {
return 1;
}finally{
return 2;
}
}
public static void main(String[] args) {
int a= show();
System.out.println(a);//测试结果2,catch里的return被finally里的return 被覆盖。
}
}
链接:http://blog.csdn.net/hguisu/article/details/6155636
在博客:http://blog.csdn.net/yongh701/article/details/50057975中提到:
finally是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,管finally中的代码怎么样,返回的值都不会改变,任然是之前保存的值),所以函数返回值是在finally执行前确定的;
验证:finally是在return后面的表达式运算后执行,断点在finally里的return处