国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

有return的情況下try catch finally的執行順序(最有說服力的總結)

2019-11-08 03:24:27
字體:
來源:轉載
供稿:網友

結論: 1、不管有木有出現異常,finally塊中代碼都會執行; 2、當try和catch中有return時,finally仍然會執行; 3、finally是在return后面的表達式運算后執行的(此時并沒有返回運算后的值,而是先把要返回的值保存起來,管finally中的代碼怎么樣,返回的值都不會改變,任然是之前保存的值),所以函數返回值是在finally執行前確定的; 4、finally中最好不要包含return,否則程序會提前退出,返回值不是try或catch中保存的返回值。 舉例: 情況1:try{} catch(){}finally{} return; 顯然程序按順序執行。 情況2:try{ return; }catch(){} finally{} return; 程序執行try塊中return之前(包括return語句中的表達式運算)代碼; 再執行finally塊,最后執行try中return; finally塊之后的語句return,因為程序在try中已經return所以不再執行。 情況3:try{ } catch(){return;} finally{} return; 程序先執行try,如果遇到異常執行catch塊, 有異常:則執行catch中return之前(包括return語句中的表達式運算)代碼,再執行finally語句中全部代碼, 最后執行catch塊中return. finally之后也就是4處的代碼不再執行。 無異常:執行完try再finally再return. 情況4:try{ return; }catch(){} finally{return;} 程序執行try塊中return之前(包括return語句中的表達式運算)代碼; 再執行finally塊,因為finally塊中有return所以提前退出。 情況5:try{} catch(){return;}finally{return;} 程序執行catch塊中return之前(包括return語句中的表達式運算)代碼; 再執行finally塊,因為finally塊中有return所以提前退出。 情況6:try{ return;}catch(){return;} finally{return;} 程序執行try塊中return之前(包括return語句中的表達式運算)代碼; 有異常:執行catch塊中return之前(包括return語句中的表達式運算)代碼; 則再執行finally塊,因為finally塊中有return所以提前退出。 無異常:則再執行finally塊,因為finally塊中有return所以提前退出。

最終結論:任何執行try 或者catch中的return語句之前,都會先執行finally語句,如果finally存在的話。 如果finally中有return語句,那么程序就return了,所以finally中的return是一定會被return的, 編譯器把finally中的return實現為一個warning。

下面是個測試程序 public class FinallyTest { public static void main(String[] args) {

System.out.PRintln(new FinallyTest().test());;}static int test(){ int x = 1; try { x++; return x; } finally { ++x; }}

} 結果是2。 分析: 在try語句中,在執行return語句時,要返回的結果已經準備好了,就在此時,程序轉到finally執行了。 在轉去之前,try中先把要返回的結果存放到不同于x的局部變量中去,執行完finally之后,在從中取出返回結果, 因此,即使finally中對變量x進行了改變,但是不會影響返回結果。 它應該使用棧保存返回值。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 周宁县| 万源市| 台州市| 宜黄县| 松潘县| 烟台市| 肇源县| 海淀区| 大余县| 定兴县| 广丰县| 夹江县| 左贡县| 五台县| 城步| 金湖县| 砀山县| 昌图县| 确山县| 宜兴市| 灵武市| 平乐县| 锡林浩特市| 永仁县| 沾益县| 西乌珠穆沁旗| 固镇县| 区。| 巴青县| 拉萨市| 得荣县| 麦盖提县| 包头市| 永年县| 沿河| 启东市| 九江县| 寻甸| 隆德县| 阿荣旗| 佛学|