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

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

try catch finally,try里有return,finally還執行么?(最強總結)

2019-11-08 02:26:05
字體:
來源:轉載
供稿:網友

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

標簽: 編譯器stringclass測試2012-10-13 17:25 74825人閱讀 評論(20) 收藏 舉報 分類:

結論: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。
分析:
<strong><em><span style="white-space: pre;">	</span>在try語句中,在執行return語句時,要返回的結果已經準備好了,就在此時,程序轉到finally執行了。在轉去之前,try中先把要返回的結果存放到不同于x的局部變量中去,執行完finally之后,在從中取出返回結果,因此,即使finally中對變量x進行了改變,但是不會影響返回結果。它應該使用棧保存返回值。</em></strong>


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 唐海县| 陇川县| 济阳县| 化州市| 富民县| 庆云县| 婺源县| 汉中市| 突泉县| 泰安市| 当阳市| 宜君县| 黄大仙区| 德化县| 鄄城县| 望江县| 阜宁县| 屏东县| 潼南县| 监利县| 越西县| 固镇县| 渝中区| 贵溪市| 洛南县| 长武县| 永胜县| 扬州市| 苏州市| 伊金霍洛旗| 公安县| 嘉荫县| 尉氏县| 临沂市| 盱眙县| 雷波县| 巴中市| 永吉县| 新密市| 崇仁县| 库尔勒市|