快捷搜索: 王者荣耀 脱发

try、catch、finally中return的问题

try、catch、finally中return的问题

一、try中有return,finally有return

public int test(){
          
   
    int i =0;
    try{
          
   
        i = 2;
        return i;
    }catch(Exception e){
          
   
        System.out.println(e);
    }finally{
          
   
        i = 3;
        return i;// i=3
    }
}

返回值为3

理由: try执行遇到return时,会将此时的返回值i保存在局部变量表 finally执行遇到对i的操作会继续对i进行操作,即:修改了i

二、try中有return,finally没有return

此时分为两种情况,可以理解为值类型和引用类型传参的区别

    返回值为基本类型(不变) 返回值为引用类型(会改变)
// 返回类型为基本类型时
public int test(){
          
   
    int i =0;
    try{
          
   
        i = 2;
        return i;// 不执行返回,暂存返回值
    }catch(Exception e){
          
   
        // **
    }finally{
          
   
        i = 3;
    }
    return i;// i=2
}
// 
public StringBuffer test2(){
          
   
    StringBuffer sb = new StringBuffer();
    try{
          
   
        sb.append("a");
        return sb;// 不执行返回,暂存返回值
    }catch(Exception e){
          
   
		// **
    }finally{
          
   
        sb.append("b");
    }
    return sb;// sb = "ab"
}

总结

1、finally中的代码总会被执行。

2、当try、catch中有return时,也会执行finally。return的时候,要注意返回值的类型,是否受到finally中代码的影响。

3、finally中有return时,会直接在finally中退出,导致try、catch中的return失效。

4、当finally中没有return时,需要在try/catch语句外显式return。

经验分享 程序员 微信小程序 职场和发展