当Java程序执行try块,catch块时遇到了return语句,return语句会导致该方法立即结束。系统执行完return语句之后,并不会立即结束该方法,而是去寻找该异常处理流程种是否包含finally块,如果没有finally块,方法终止,返回相应的返回值。如果有finally块,只有当finally块执行完成后,系统才会再次跳回来根据return语句结束方法。如果finally块里使用了return语句来导致方法结束,则finally块已经结束了方法,系统将不会跳回去执行try块,catch块里的任何代码。当然需要注意在进行异常捕获时,一定要记住先捕获小的异常,再捕获大的异常。
public class StudyFinally {
public static void main(String[] args) {
int a = test();
System.out.println(a);
}
private static int test() {
int count = 5;
try{
count = count / 0;
System.out.println("try 语句块被执行了");
return count++;
}catch (Exception e){
System.out.println("catch 语句块被执行了");
throw e;
} finally {
System.out.println("finally 语句块被执行了");
return count+2;
}
}
}
执行结果为:
catch 语句块被执行了
finally 语句块被执行了
7
以上程序再遇到了count/0时发生了异常,然后执行catch语句块中的语句,因为有finally语句块,所以执行finally语句块的语句,finally语句块里面又有return返回语句作为函数的结束,所以并不会抛出异常。