第一种情况:
@Test
public static int test1() {
int num =10;
try {
return num;
}catch (Exception e){
}finally {
num = 20;
return num;
}
}
//运行结果:20
try…catch和finally 是两个线程,执行顺序是先将try中的return 返回值先保存起来,最后执行finally,如果finally中这个返回值被改变那么最终返回的是finally中的返回值。
第二种情况:
private static int test3(){
int x = 1;
try{
return x;
}catch (Exception e){
}finally{
x = 2;
}
return x;
}
//运行结果:1
当finally里中没有return,但是finally中改变了try中的返回值, 如果返回值是基本数据类型,最后finally执行对返回值的改变不起作用
第三种情况:
private static int test3(){
Num number = new Num();
try{
return number;
}catch(Exception e){
}finally{
number.num = 100;
}
return number;
}
}
//运行结果: 100
当finally里中没有return,但是finally中改变了try中的返回值, 如果返回值是引用数据类型,最后finally执行完后对引用数据类型的属性值的改变起作用的。