- try块:用于捕获异常。其后可接零个或多个catch块,如果没有catch块,则必须跟一个finally块。
- catch块:用于处理try捕获到的异常。
- finally块:无论是否捕获或处理异常,finally块里的语句都会被执行。当在try块或catch块中遇到return 语句时,finally 语句块将在方法返回之前被执行。
但是在以下4种特殊情况下,finally块不会被执行:
- 在finally 语句块第一行发生了异常。因为在其他行,finally块还是会得到执行
- 在前面的代码中用了System.exit(int)已退出程序。exit是带参函数;
- 若该语句在异常语句之后,finally会执行
- 程序所在的线程死亡。
- 关闭CPU。
当try 语句和finally 语句中都有return语句时,在方法返回之前,finally 语句的内容将被执行,并且finally语句的返回值将会覆盖原始的返回值。如下:
public class TestFinally {
public static int Tfinally (int value){
try{
return value* value;
}finally{
if(value==2){
return 0;
}
}
}
}
这个地方返回的就是0