Java异常捕获之try-catch-finally-return的执行顺序.md

本文详细解析了Java中异常处理的流程,通过不同场景下的示例代码,具体展示了try、catch及finally块中return语句的执行顺序及其对程序运行结果的影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

情况1:try块中没有抛出异常try和finally块中都有return语句

public static int NoException(){ 
     int i=10; 
     try{ 
        System.out.println("i in try block is"+i);
        return --i;
     }catch(Exception e){ 
        --i; 
        System.out.println("i in catch - form try block is"+i);
        return --i; 
     }finally{ 
        System.out.println("i in finally - from try or catch block is"+i);
        return --i; 
     } 
   } 

执行结果:

i in try block is10 i in finally - from try or catch block is9 the method value is8

执行顺序: 执行try块,执行到return语句时,先执行return的语句,--i,但是不返回到main 方法,执行finally块,遇到finally块中的return语句,执行--i,并将值返回到main方法,这里就不会再回去返回try块中计算得到的值

情况2:try块中没有抛出异常,仅try中有return语句

代码:

  public static int NoException(){ 
   int i=10; 
   try{ 
     System.out.println("i in try block is--"+i);
     return --i;
   }catch(Exception e){ 
     --i; 
     System.out.println("i in catch - form try block is--"+i); 
     return --i; 
   }finally{ 
     System.out.println("i in finally - from try or catch block is--"+i);
     --i; 
     System.out.println("i in finally block is--"+i); 
     //return --i; 
    }
 }

执行结果:

i in try block is--10 i in finally - from try or catch block is--9 i in finally block is--8 the method value is--9

顺序:try中执行完return的语句后,不返回,执行finally块,finally块执行结束后,返回到try块中,返回i在try块中最后的值

情况3:try块中抛出异常try,catch,finally中都有return语句

  public static int WithException(){ 
    int i=10;
    try{ 
      System.out.println("i in try block is--"+i);
      i = i/0; 
      return --i;
    }catch(Exception e){ 
      System.out.println("i in catch - form try block is--"+i);
      --i;
      System.out.println("i in catch block is--"+i);
      return --i;
    }finally{ 
      System.out.println("i in finally - from try or catch block is--"+i);
      --i;
      System.out.println("i in finally block is--"+i);
      return --i; 
    }
  }

执行结果:

i in try block is--10 i in catch - form try block is--10 i in catch block is--9 i in finally - from try or catch block is--8 i in finally block is--7 the method value is--6

顺序,抛出异常后,执行catch块,在catch块的return的--i执行完后,并不直接返回而是执行finally,因finally中有return语句,所以,执行,返回结果6

情况4,catch中有return,finally中没有

同上,执行完finally语句后,依旧返回catch中的执行return语句后的值,而不是finally中修改的值

情况5:try和catch中都有异常,finally中无return语句

  public static int CatchException(){ 
    int i=10;
    try{ 
      System.out.println("i in try block is--"+i);
      i=i/0;
      return --i;
    }catch(Exception e){ 
      System.out.println("i in catch - form try block is--"+i);
      int j = i/0;
      return --i;
    }finally{ 
      System.out.println("i in finally - from try or catch block is--"+i); 
      --i;
      System.out.println("i in finally block is--"+i); 
      //return --i; 
   }
 }

结果:

i in try block is--10 i in catch - form try block is--10 i in finally - from try or catch block is--10 i in finally block is--9 Exception in thread "main" java.lang.ArithmeticException: / by zero at exception.ExceptionTest0123.CatchException(ExceptionTest0123.java:29) at exception.ExceptionTest0123.main(ExceptionTest0123.java:17)

执行顺序:在try块中出现异常,到catch中,执行到异常,到finally中执行,finally执行结束后判断发现异常,抛出

情况6:try,catch中都出现异常,在finally中有返回

  public static int CatchException(){ 
    int i=10; 
    try{ 
      System.out.println("i in try block is--"+i);
      i=i/0;
      return --i; 
    }catch(Exception e){ 
      System.out.println("i in catch - form try block is--"+i);
      int j = i/0;
      return --i; 
    }finally{ 
      System.out.println("i in finally - from try or catch block is--"+i);
      --i;
      System.out.println("i in finally block is--"+i); 
      return --i; 
    }
 }

运行结果:

i in try block is--10 i in catch - form try block is--10 i in finally - from try or catch block is--10 i in finally block is--9 the method value is--8

执行顺序:try块中出现异常到catch,catch中出现异常到finally,finally中执行到return语句返回,不检查异常 没有catch,只有try和finally时,执行顺序和上面的几种情况差不多,只是少了catch块的执行

转载于:https://my.oschina.net/Wallen/blog/818413

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值