今天在处理自定义异常的时候,回看了下异常的基本知识
这里主要说一下try catch finally的执行顺序:
try无异常,执行try代码体和finally
try有异常,执行try代码体和catch代码体,finally
try有返回值,finally无返回值,则返回值是try中的返回值
try有返回值,finally也有返回值,则返回值是finally的返回值,也就是finally会覆盖try的返回值
catch同理,finally无返回值,则使用catch的返回值,如果finally有返回值,则使用finally的返回值
总结:finally中如果包含return,那么程序将在这里返回,而不是try或catch中的return返回,返回值就不是try或catch中保存的返回值了
例:
int intB=10;
try{
intB=9;
int intC=intB/0;
System.out.println("try intB:"+intB);
return intB;
}catch (Exception ex){
intB=8;
System.out.println("catch intB:"+intB);
return intB;
}finally {
intB=7;
System.out.println("finally intB:"+intB);
//如果没有这句话,则返回值8,加上这句话,返回值7
return intB;
}
无加红语句结果:
catch intB:8
finally intB:7
返回的intB值:8
如果加上加红语句:
catch intB:8
finally intB:7
返回的intB值:7