Java如果在try里面執(zhí)行return還會(huì)不會(huì)執(zhí)行finally
我們都知道,finally在捕獲異常的操作中,總是最后并且一定會(huì)執(zhí)行的。那么,如果我在使用try finally的時(shí)候,如果try 給了一個(gè)return,那么還會(huì)不會(huì)執(zhí)行finally呢?這里就來(lái)試一試
finallyFinally代碼不管有沒(méi)有異常發(fā)生它都會(huì)執(zhí)行。
沒(méi)有異常發(fā)生的時(shí)候,在try內(nèi)的代碼執(zhí)行結(jié)束后,執(zhí)行finally。
如果發(fā)生了異常并且給catch捕獲,則在執(zhí)行完catch之后執(zhí)行finally。
如果有異常且未被捕獲,則在異常被拋給上層之前執(zhí)行。
事實(shí)上,不用try catch也可以直接執(zhí)行 try finally。那么如果我在try 里面 使用 return 會(huì)怎樣呢?
代碼如下
public class Test { public static void main(String[] args) { int result = fun(); System.out.println('result = ' + result); } public static int fun(){ int ret = 0; try{ return ret; }finally { ret = 5; System.out.println('ret = ' + ret); } }}
測(cè)試的結(jié)果是,finally里面的代碼依然會(huì)被執(zhí)行。但是,雖然給ret賦值了5。但返回的值最終還是0。所以,即使在try里面使用了return,也依然會(huì)執(zhí)行finally。但是finally無(wú)法改變r(jià)eturn的值。
因?yàn)樵趫?zhí)行的過(guò)程中, try執(zhí)行到return,會(huì)先把ret的值保存在一個(gè)臨時(shí)變量中,等到finally執(zhí)行完畢之后才會(huì)返回。因此finally無(wú)法改變最終的返回結(jié)果
那么,如果我在finally里面也執(zhí)行一個(gè)return呢?結(jié)果會(huì)怎樣?
代碼如下
public class Test { public static void main(String[] args) { int result = fun(); System.out.println('result = ' + result); } public static int fun(){ int ret = 0; try{ return ret; }finally { ret = 5; return ret; } }}
這個(gè)時(shí)候try里面的return就會(huì)丟失。只會(huì)執(zhí)行finally里面的return
到此這篇關(guān)于Java如果在try里面執(zhí)行return,那么還會(huì)不會(huì)執(zhí)行finally的文章就介紹到這了,更多相關(guān)java try執(zhí)行return內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. PHP設(shè)計(jì)模式中工廠模式深入詳解2. ThinkPHP5實(shí)現(xiàn)JWT Token認(rèn)證的過(guò)程(親測(cè)可用)3. CSS hack用法案例詳解4. JSP數(shù)據(jù)交互實(shí)現(xiàn)過(guò)程解析5. 用css截取字符的幾種方法詳解(css排版隱藏溢出文本)6. ASP 信息提示函數(shù)并作返回或者轉(zhuǎn)向7. Ajax實(shí)現(xiàn)表格中信息不刷新頁(yè)面進(jìn)行更新數(shù)據(jù)8. .NET中l(wèi)ambda表達(dá)式合并問(wèn)題及解決方法9. asp(vbs)Rs.Open和Conn.Execute的詳解和區(qū)別及&H0001的說(shuō)明10. ASP.NET MVC遍歷驗(yàn)證ModelState的錯(cuò)誤信息
