java之try catch finally中的return执行实例分析之一

异常抛出代码先简介

try {
            //一些会抛出异常的方法
        } catch (Exception e) {
            // 处理该异常的代码块
        }
        catch (Exception2 e) {
            // 处理该异常的代码块
        }//可以加n个catch (Exception e) {}
        finally {
            //最终要执行的代码,比如关闭连接
        }

catch的异常的catch应该是从子类到父类的顺序,不懂的点这里看看知乎的解释:“异常屏蔽”现象

基本就是,先父类的话,会把异常catch完了,就不会捕捉到子类了。


好了进入正题,try catch finally中的return的不同执行情况是怎么样的

情况一:只在异常外return一下

package return1;

public class ceshi{
    
    public  static int yichang(){
        try {
            System.out.println("执行try");
        } catch (Exception e) {
            System.out.println("执行catch");
            
        }
        finally {
            System.out.println("执行finally");
        
        }
        return 4;
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}

结果:顺序执行,没有异常不执行catch

执行try
执行finally
4

情况二:加上异常

package return1;

public class ceshi{
    static int i=0;
    public  static int yichang(){
        try {
            i=1%i;
            System.out.println("执行try");
        
            
        } catch (Exception e) {
            System.out.println("执行catch");
        }
        finally {
            System.out.println("执行finally");
        
        }
        return 4;
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}

执行catch
执行finally
4

i=1%i;换一下位置看看

package return1;

public class ceshi{
    static int i=0;
    public  static int yichang(){
        try {
            
            System.out.println("执行try");
            i=1%i;
            
        } catch (Exception e) {
            System.out.println("执行catch");
        }
        finally {
            System.out.println("执行finally");
        
        }
        return 4;
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}

执行try
执行catch
执行finally
4

说明有异常情况下try,catch,finally是顺序执行的,但是try里面有异常抛出的情况下,异常后面的代码都不执行。

 

情况三:然后catch加上return 2;

package return1;

public class ceshi{
    static int i=0;
    public  static int yichang(){
        try {
            
            System.out.println("执行try");
            i=1%i;
            
        } catch (Exception e) {
            System.out.println("执行catch");
            return 2;
        }
        finally {
            System.out.println("执行finally");
        
        }
        return 4;
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}

执行try
执行catch
执行finally
2

然后把异常去掉

package return1;

public class ceshi{
  
    public  static int yichang(){
        try {
            
            System.out.println("执行try");
            
            
        } catch (Exception e) {
            System.out.println("执行catch");
            return 2;
        }
        finally {
            System.out.println("执行finally");
        
        }
        return 4;
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}
执行try
执行finally
4

只在try{ }      catch(){return;}     finally{}    return;

有异常      执行时会进catch,并且只返回catch内的return        

没有异常 执行时不会进catch,所以catch内的代码都不执行,只返回

 

情况四:try{ return;}  catch(){return;}  finally{}

无异常情况下

package return1;

public class ceshi{
    static int i=0;
    public  static int yichang(){
        try {
            
            System.out.println("执行try");
            
            return 1;
        } catch (Exception e) {
            System.out.println("执行catch");
            return 2;
        }
        finally {
            System.out.println("执行finally");
        
        }
        
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}
执行try
执行finally
1

 

有异常情况下:

package return1;

public class ceshi{
    static int i=0;
    public  static int yichang(){
        try {
            
            System.out.println("执行try");
            i=1%i;
            return 1;
        } catch (Exception e) {
            System.out.println("执行catch");
            return 2;
        }
        finally {
            System.out.println("执行finally");
        
        }
        
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}

执行try
执行catch
执行finally
2

情况四:try{ return;}  catch(){return;}  finally{}

无异常的      执行try 执行finally   catch不执行,所以返回try的return

有异常的      执行try 执行catch 执行finally   最后返回catch的返回值

 

情况五:try{ return;}     catch(){return;}     finally{return;}

无异常

package return1;

public class ceshi{
    static int i=0;
    public  static int yichang(){
        try {
            
            System.out.println("执行try");
            return 1;
        } catch (Exception e) {
            System.out.println("执行catch");
            return 2;
        }
        finally {
            System.out.println("执行finally");
           return 3;
        }
        
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}

执行try
执行finally
3

有异常

package return1;

public class ceshi{
    static int i=0;
    public  static int yichang(){
        try {
            
            System.out.println("执行try");
            i=1%i;
            return 1;
        } catch (Exception e) {
            System.out.println("执行catch");
            return 2;
        }
        finally {
            System.out.println("执行finally");
           return 3;
        }
        
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}

执行try
执行catch
执行finally
3

情况五:try{ return;}     catch(){return;}     finally{return;}

无异常  执行try 执行finally  不执行catch   返回finally的return

有异常  执行try 执行catch 执行finally     返回finally的return

情况六:try{ return;}     catch(){}     finally{return;}

无异常

package return1;

public class ceshi{
    static int i=0;
    public  static int yichang(){
        try {
            
            System.out.println("执行try");
            
            return 1;
        } catch (Exception e) {
            System.out.println("执行catch");
            
        }
        finally {
            System.out.println("执行finally");
           return 3;
        }
        
        
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}
执行try
执行finally
3

有异常

package return1;

public class ceshi{
    static int i=0;
    public  static int yichang(){
        try {
            
            System.out.println("执行try");
            i=1%i;
            return 1;
        } catch (Exception e) {
            System.out.println("执行catch");
            
        }
        finally {
            System.out.println("执行finally");
           return 3;
        }
        
        
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}
执行try
执行catch
执行finally
3

情况六  try{ return;}     catch(){}     finally{return;}

无异常   执行try 执行finally  不执行catch  返回finally里面的return

有异常   执行try 执行catch 执行finally   返回finally里面的return

情况七:try{ }     catch(){return;}     finally{return;}

无异常

package return1;

public class ceshi{
    static int i=0;
    public  static int yichang(){
        try {
            
            System.out.println("执行try");
            
            
        } catch (Exception e) {
            System.out.println("执行catch");
            return 2;
        }
        finally {
            System.out.println("执行finally");
           return 3;
        }
        
        
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}

执行try
执行finally
3

有异常

package return1;

public class ceshi{
    static int i=0;
    public  static int yichang(){
        try {
            
            System.out.println("执行try");
            i=1%i;
            
        } catch (Exception e) {
            System.out.println("执行catch");
            return 2;
        }
        finally {
            System.out.println("执行finally");
           return 3;
        }
        
        
    }
    public static void main(String[] args) {
        System.out.println(yichang());
    }

}

执行try
执行catch
执行finally
3

情况七:try{ }     catch(){return;}     finally{return;}

无异常   执行try 执行finally   不执行catch   返回finally里面的return

有异常   执行try 执行catch 执行finally  返回finally里面的return

public static int yichang(){ 

        try{return; }                        //1

        catch(){return;}                  //2

        finally{return;}                   //3

        return;                              //4
}

总结:在方法内,1,2,3如果同时存在任意两个两个return或者只finally里面存在一个return,4则不能存在,


不能同时存在,但是至少存在一个,因为一个方法只有一个返回值

finally  任何情况下必定执行 下面这个图片是一个博客里面看到的,虽然说的不错,不过我感觉这样写的时候很少,因为这样写就失去了try  catch finally程序的意义了,不是正常程序用的方法,所以说正常使用情况下finally一定执行,大家可以思考一下)

 

先判断是否有异常

无异常,不进catch,所以不考虑catch里面的return,

如果finally有renturn返回的一定是finally里面的

如果finally没有return返回的是try里面的return

有异常,先判断是否有finally

如果,一定返回finally的return

如果没有,最后返回catch的返回值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值