2013-12-12 29 views
5

如果我們給return語句像這樣的嘗試,會是怎樣執行的順序什麼是嘗試,抓執行的順序,最後

try{ 
--- ---- 
----- 
return a; 
} 

catch{ 
} 
finally{ 
} 

這裏會是怎樣執行的順序,如果有回報在嘗試。請讓我知道

+0

你爲什麼不嘗試一下呢?這是微不足道的考驗。 – Grodriguez

+0

@Grodriguez謝謝 – Nani

回答

0

最後總是執行,return語句後評價。

+1

那麼,return語句中的表達式仍然會在'finally'子句之前被評估。 –

2

http://docs.oracle.com/javase/tutorial/essential/exceptions/finally.html

http://docs.oracle.com/javase/specs/jls/se7/html/jls-14.html#jls-14.20.2

finally始終執行。如果在try一個returntrycatch其餘不執行,則執行finally(從最裏面最外),則函數退出。

+3

不準確。如果調用System.exit(),或者JVM崩潰,'finally'將不會被執行。 – Maroun

+4

是的,如果你從牆上拔掉計算機,它也不會執行。這是同樣的情況,沒有必要限定。 – Mumbleskates

+1

@Widdershins或者如果恐龍會吃掉你的機器。但是調用'System.exit()'是一種你應該照顧的情況。 (我同意JVM崩潰..) – Maroun

0

無論可能是finally總會執行情況。 成功執行try將不執行catch塊。如果try塊拋出異常然後catch塊將執行

0

通常順序執行次序的try-catch-finally是第一try,那麼如果exception trows和將捕獲的executecatch。如果發現異常finally將始終執行。

如果您的try中的return,在try中的執行將在那裏停止並執行finally。如果exception在此之前拋出並捕獲return正常執行順序如下。

讓我們下面的代碼

public static void main(String[] args) { 
    String[] arr=getInfo(); 
    for(String i:arr){ 
     System.out.println(i); 
    } 
} 

public static String[] getInfo(){ 
    String[] arr=new String[3]; 
    try { 
     arr[0]="try"; 
     return arr; 
    }catch (Exception e){ 
     arr[1]="catch"; 
     return arr; 
    }finally { 
     arr[2]="finally"; 
     return arr; 
    } 
} 

跑得把

try // return in try 
null 
finally // returning value in finally. 

現在,這一點就把解釋你想要的每一件事情。 finallytry中存在return時運行。

如果您的try中有System.exit(0)finally不會執行。

0

如果在嘗試一回,然後控制就會進入finally塊,執行的代碼出現,然後退出。因此,在這個過程中,如果在finally塊中對try中返回的任何變量進行任何更改,並且如果最後返回相同的變量,則會返回latest。

try { 
      i = 11; 
      return i; 
      } catch (Exception e) { 
       // TODO: handle exception 
      } finally{ 

       i = 12; 
       return i; --> This will be returned 
      } 
     //return i; 


    } 

但是,如果只有修改,最後沒有重試,try中返回的值將是最終值。

try { 
      i = 11; --> this will be returned 
      return i; 
      } catch (Exception e) { 
       // TODO: handle exception 
      } finally{ 

       i = 12; -- this will be executed 

      } 
     //return i; 


    } 
0
try-catch處理,當您從 tryreturn的東西,它會超出 try-catch-finally範圍..因爲catch塊只接受的是什麼 try拋出..不返回的事

,現在當你從try塊返回它不會到達try end,最後不會被執行,它會跳出try-catch-finally塊,返回到您的代碼。

相關問題