国产探花免费观看_亚洲丰满少妇自慰呻吟_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進行了改變,但是不會影響返回結果。 它應該使用棧保存返回值。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 阳西县| 武清区| 泊头市| 江华| 高安市| 鄄城县| 乡城县| 锡林郭勒盟| 邢台县| 隆子县| 孙吴县| 巩义市| 乌兰浩特市| 闸北区| 合水县| 和田县| 扬中市| 全椒县| 太仆寺旗| 中西区| 台南县| 天全县| 遂溪县| 美姑县| 陆丰市| 襄樊市| 乃东县| 宜兴市| 上饶县| 虞城县| 临沧市| 佛山市| 康马县| 高安市| 江陵县| 维西| 吴堡县| 常山县| 德清县| 百色市| 仁布县|