try..catch..finally執行順序return


try..catch..finally這個語法大家都很熟悉,就是捕捉異常、處理異常,面試中經常被問到的一個問題是:如果在try...catch中的某某地方return了,那么之后的某某步驟還會不會執行。今天就來用代碼分析一下各種可能的執行情況,懶得看文章的話,直接看最后的總結,如果不明白再回頭看文章。

1.首先要明確一個,在finally里面是不能執行return語句的,如果在finally中使用了return,則會提示這樣的錯誤:“控制不能離開 finally子句主體”。如圖1:      

              

                  圖1

2.只有try中有return語句

當一個捕捉異常語句中只有try語句中有return時,如下代碼:

private string   tryFun(int num)
{
     int result = 0;
     try
     {
          result = 10 / num;
          return "1";
     }
     catch
     {                
     }
     finally
     {
                
     }
     return "-2";
}

如果這時候num的值為0,則會出現除0的異常,則return “1”不執行,而去執行catch,因為此時假設只有try中有return語句,所以當catch執行完之后將會執行函數最后的return “-2”語句;如果try語句塊中沒有異常,則return "-2"語句不執行。

3.只有catch中有return語句

當一個捕捉異常語句中只有catch語句中有return時,如下代碼:

private string   tryFun(int num)
{
     int result = 0;
     try
     {
          result = 10 / num;         
     }
     catch
     {                
            return "-1";
     }
     finally
     {
                
     }
     return "-2";
}    

如果這時候num的值為0,則會出現除0的異常,則去執行catch,因為此時假設只有catch中有return語句,所以當catch執行完之后直接return “-1”,就不執行finally之后的語句(finally塊中的語句肯定是會執行的),也就是在這里return “-2”語句不執行。

4.當try...catch中都有return語句

當try...catch中都有return語句,代碼如下:

 private string   tryFun(int num)
 {
      int result = 0;
      try
      {
          result = 10 / num;
          return "try";
      }
      catch
      {
          return "catch";
      }
      finally
      {
      }
      return "-2";
 }

這時,不管執行的是try還是catch中的語句,return “-2”永遠都不執行,也就是finally之后的語句都不執行了(finally里面的語句肯定還是執行啦)。

總結:不管是執行try還是catch,finally中的語句肯定是會執行的;不管是執行try還是catch,如果所執行的語句中(try和catch中的return只有一個會執行,如果被catch了,肯定是執行catch語句中的return;如果沒有被catch,那肯定是執行try中的return。這里假設它們中有return,如果沒有return,肯定會執行finally后面的語句)有return語句,則finally之后的語句就不執行(finally里面的語句肯定還是執行啦);如果是執行try或catch中的語句塊沒有return語句,則finally后面的語句還是會執行的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM