情况1
try{ return; }catch(){} finally{} return;
public class Try {
public static void main(String[] args) {
System.out.println(ttry());
}
private static int ttry()
{
int num = 10;
try {
System.out.println("进入try");
return num += 30;
} catch (Exception e) {
System.out.println("进入error");
} finally {
if (num > 30) {
System.out.println("num>30 : " + num);
}
System.out.println("进入finally");
}
return num;
}
}
运行结果
在运行try的同时先将return的值40临时保存起来,在之后运行finally,最后才返回try中的return值
情况2
try{ } catch(){return;} finally{return} ;
public class Try {
public static void main(String[] args) throws Exception {
Try aTry = new Try();
String res = aTry.test();
System.out.println(res);
}
public String test() {
try {
System.out.println("正在执行 try");
throw new Throwable("Some error");
} catch (Throwable throwable) {
System.out.println("异常");
return new String("catch");
} finally {
System.out.println("正在执行 finally");
return new String("返回 finally");
}
}
}
运行结果
可以看出finally无论是在什么情况下都会执行,执行return方法也是优先执行。
情况3
try{return } catch(){} finally{return} ;
public class Try{
public static void main(String[] args){
System.out.println(test());
}
private static int test(){
int num = 10;
try{
System.out.println("进入try");
return num += 80;
}catch(Exception e){
System.out.println("进入error");
}finally{
if (num > 20){
System.out.println("num>20 : " + num);
}
System.out.println("进入finally");
num = 100;
return num;
}
}
}
运行结果
在try中执行完num并得到num的临时变量90,进入finally方法中直接返回finally的return值
结合以上集中情况来看
在执行完try
和catch
语句中后,都会执行finally
中的语句,此时,如果finally
中有return
就直接从这里跳出。如果没有的话,就从try
或者catch
中的return
中返回。