• try-catch-finally中return的执行情况分析


    try-catch-finally中return的执行情况分析:
      1、在try中没有异常的情况下try、catch、finally的执行顺序 try --- finally
      2、如果try中有异常,执行顺序是try --- catch --- finally
      3、如果try中没有异常并且try中有return这时候正常执行顺序是try ---- finally --- return
      4、如果try中有异常并且try中有return这时候正常执行顺序是try----catch---finally--- return
      总之 finally 永远执行!
      try-catch-finally里都没有return ,finally 之后有个return ,如果try中有异常,finally执行完后,还能执行return吗?那是不可能执行的了,try中有异常以后,根据java的异常机制先执行catch后执行finally,此时错误异常已经抛出,程序因异常而终止,所以你的return是不会执行的!
     
      在存在try-catch-finally的方法中,return可能出现的位置有4个,在try中,在catch中,在finally中,在finally后(try-catch-finally外的语句块)。
         在这4个位置都出现return的情况下(事实上应该是不可能的,如果前面3个位置都存在return,那么最后一个位置的return就成了unreachable code,编译不会通过),最终会执行的return应该是finally中的return。也就是finally中的return会覆盖掉其它位置的return
    try中有return语句:
    -------- try catch finally顺序:

    1.try {}.
    2.如果有Error Exception则,执行catch(){}中的代码。
    3.无论有没有 Error Exception都要执行finally{}中的代码。
    4.执行 try 中的 return

    catch中有return

     但当finally中不存在return,而catch中存在return,但finally中的语句又会对catch中的return的值产生影响时,情况就有点复杂。

    int ret =0;
    try
    {
    thrownew
    Exception();
    }
    catch
    (Exception e){
    ret
    =1
    ;
    return ret;
    }
    finally
    {
    ret
    =2
    ;

    }
    这里finally中没有return,但是将catch中要return的ret赋值为2.那么最后返回的值是1. 为什么?
    从调试中可以知道Finally中的赋值语句的确被执行了,而执行完这条finally语句后的下一条语句就是catch中的return,那么为啥返回的是1呢?
    catch中有return,finally中没有return,return的值在执行finally之前已经确定下来了。
    另一个值得注意的是最后的return(位于try-catch-finally外)并没有被执行。
  • 相关阅读:
    jeecg团队招新人(5人)
    编程之美2.14 求数组的子数组之和的最大值
    使用VS连接SQLServe时提示未能载入文件或程序集“System.Data.OracleClient, Version=2.0.0.0, Culture=neutral, PublicKey
    Drupal 7.31 SQL注入漏洞利用具体解释及EXP
    linux下mysql开启慢查询
    答大二学生:坚持正确方向,改变学习方式
    JavaWeb-10(会话技术之session&JSP)
    Java内存区域分析
    Linux系统编程——进程间通信:命名管道(FIFO)
    学科、专业目录_各类名单_中国学位与研究生教育信息网
  • 原文地址:https://www.cnblogs.com/lijiews/p/lj2014001211437.html
Copyright © 2020-2023  润新知