try catch finally 中的return

try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗

1 执行顺序

try{

}catch(){

}finally{

}
  • 无异常:try->finally
  • 有异常:try->catch->finally

2 return在不同的块中

2.1 return在try中

  • 无异常:保存try中return后的表达式计算结果(a=0)->finally随便怎么修改(a=1)->依然return之前保存的结果(a=0)
int a = 0;
try{
    return a;
}catch(){

}finally{
    ++a;
}

但如果a是引用类型的话,finally中修改了a里面的成员字段的值,这样在最后return后的值是起效的。

2.2 return在catch中

  • 有异常:try抛异常->保存catch中return后的表达式结果(a=1)->finally随便怎么修改(a=2)->依然return之前保存的结果(a=1)
int a = 0;
try{
    //抛异常
    return a;
}catch(){
    return ++a;
}finally{
    ++a;
}

如果a是引用类型的话,同上。

2.3 return在finally中

  • 假设无异常:保存try中return后的表达式计算结果(a=0)->保存finally中return后的表达式计算结果(a=1),直接返回1。
int a = 0;
try{
    return a;
}catch(){

}finally{
    return ++a;
}

有异常也同理,都会在finally中直接返回

Copyright © qgao 2021-* all right reserved,powered by Gitbook该文件修订时间: 2022-06-17 16:44:38

results matching ""

    No results matching ""