如果我們給return語句像這樣的嘗試,會是怎樣執行的順序什麼是嘗試,抓執行的順序,最後
try{
--- ----
-----
return a;
}
catch{
}
finally{
}
這裏會是怎樣執行的順序,如果有回報在嘗試。請讓我知道
如果我們給return語句像這樣的嘗試,會是怎樣執行的順序什麼是嘗試,抓執行的順序,最後
try{
--- ----
-----
return a;
}
catch{
}
finally{
}
這裏會是怎樣執行的順序,如果有回報在嘗試。請讓我知道
最後總是執行,return語句後評價。
那麼,return語句中的表達式仍然會在'finally'子句之前被評估。 –
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
一個return
的try
和catch
其餘不執行,則執行finally
(從最裏面最外),則函數退出。
不準確。如果調用System.exit(),或者JVM崩潰,'finally'將不會被執行。 – Maroun
是的,如果你從牆上拔掉計算機,它也不會執行。這是同樣的情況,沒有必要限定。 – Mumbleskates
@Widdershins或者如果恐龍會吃掉你的機器。但是調用'System.exit()'是一種你應該照顧的情況。 (我同意JVM崩潰..) – Maroun
無論可能是finally
總會執行情況。 成功執行try
將不執行catch
塊。如果try
塊拋出異常然後catch
塊將執行
通常順序執行次序的try-catch-finally
是第一try
,那麼如果exception
trows和將捕獲的execute
catch
。如果發現異常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.
現在,這一點就把解釋你想要的每一件事情。 finally
在try
中存在return
時運行。
如果您的try
中有System.exit(0)
,finally
不會執行。
如果在嘗試一回,然後控制就會進入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;
}
首先你需要去記錄和理解這個概念正確,您可以參考這些文檔
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
這裏計算器沒有人應該因爲這個站點解釋基本上不是一個總結性的目的。
這兩個鏈接已經提供。 –
try-catch
處理,當您從
try
塊
return
的東西,它會超出
try-catch-finally
範圍..因爲catch塊只接受的是什麼
try
拋出..不返回的事
,現在當你從try塊返回它不會到達try end,最後不會被執行,它會跳出try-catch-finally
塊,返回到您的代碼。
你爲什麼不嘗試一下呢?這是微不足道的考驗。 – Grodriguez
@Grodriguez謝謝 – Nani