try catch 的一些總結(jié)
1、不管有木有出現(xiàn)異常,finally塊中代碼都會(huì)執(zhí)行;
2、當(dāng)try和catch中有return時(shí),finally仍然會(huì)執(zhí)行;
3、finally是在return后面的表達(dá)式運(yùn)算后執(zhí)行的(此時(shí)并沒(méi)有返回運(yùn)算后的值,而是先把要返回的值保存起來(lái),管finally中的代碼怎么樣,返回的值都不會(huì)改變,任然是之前保存的值),所以函數(shù)返回值是在finally執(zhí)行前確定的;注意?。。。哼@里的返回值是基本類(lèi)型的值。如果是list,map,自定義類(lèi)等引用類(lèi)型時(shí),是影響返回結(jié)果的
4、finally中最好不要包含return,否則程序會(huì)提前退出,返回值不是try或catch中保存的返回值。
對(duì)于第三點(diǎn),寫(xiě)兩個(gè)代碼來(lái)讓大家更加清楚。
1.?finally修改的基本類(lèi)型是不影響返回結(jié)果的:
public?int?test1(){ int?i?=?1; try?{ i++; return?i; }finally{ ++i; } } //這段代碼輸出的結(jié)果是?2
2.?修改list ,map,自定義類(lèi)等引用類(lèi)型時(shí),是影響返回結(jié)果的。
public?List<String>?test2(){ List<String>?items?=?new?ArrayList<String>(); items.add("aa"); items.add("bb"); try{ items.add("cc"); return?items; }finally{ items.add("finally"); } } //這段代碼輸出的結(jié)果是?[aa,?bb,?cc,?finally]
2016-01-28
mark
2015-12-20
good