Java如果在try里面執(zhí)行return還會不會執(zhí)行finally
前言
我們都知道,finally在捕獲異常的操作中,總是最后并且一定會執(zhí)行的。那么,如果我在使用try finally的時候,如果try 給了一個return,那么還會不會執(zhí)行finally呢?這里就來試一試
finally
Finally代碼不管有沒有異常發(fā)生它都會執(zhí)行。
沒有異常發(fā)生的時候,在try內(nèi)的代碼執(zhí)行結(jié)束后,執(zhí)行finally。
如果發(fā)生了異常并且給catch捕獲,則在執(zhí)行完catch之后執(zhí)行finally。
如果有異常且未被捕獲,則在異常被拋給上層之前執(zhí)行。
事實(shí)上,不用try catch也可以直接執(zhí)行 try finally。那么如果我在try 里面 使用 return 會怎樣呢?
代碼如下
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); } } }
測試的結(jié)果是,finally里面的代碼依然會被執(zhí)行。但是,雖然給ret賦值了5。但返回的值最終還是0。所以,即使在try里面使用了return,也依然會執(zhí)行finally。但是finally無法改變return的值。
因?yàn)樵趫?zhí)行的過程中, try執(zhí)行到return,會先把ret的值保存在一個臨時變量中,等到finally執(zhí)行完畢之后才會返回。因此finally無法改變最終的返回結(jié)果
那么,如果我在finally里面也執(zhí)行一個return呢?結(jié)果會怎樣?
代碼如下
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; } } }
這個時候try里面的return就會丟失。只會執(zhí)行finally里面的return
到此這篇關(guān)于Java如果在try里面執(zhí)行return,那么還會不會執(zhí)行finally的文章就介紹到這了,更多相關(guān)java try執(zhí)行return內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
全面解析Spring Security 過濾器鏈的機(jī)制和特性
這篇文章主要介紹了Spring Security 過濾器鏈的機(jī)制和特性,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07struts1實(shí)現(xiàn)簡單的登錄功能實(shí)例(附源碼)
本篇文章主要介紹了struts1實(shí)現(xiàn)簡單的登錄功能實(shí)例(附源碼),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04IntelliJ?IDEA社區(qū)版2021.3配置SpringBoot項(xiàng)目詳細(xì)教程及失敗案例
IntelliJ?IDEA?2021.3.3是一款集成開發(fā)環(huán)境,用于Java和其他編程語言的開發(fā),下面這篇文章主要給大家介紹了關(guān)于IntelliJ?IDEA社區(qū)版2021.3配置SpringBoot項(xiàng)目詳細(xì)教程及失敗案例的相關(guān)資料,需要的朋友可以參考下2024-03-03WebSocket實(shí)現(xiàn)數(shù)據(jù)庫更新時前端頁面刷新
這篇文章主要為大家詳細(xì)介紹了WebSocket實(shí)現(xiàn)數(shù)據(jù)庫更新時前端頁面刷新,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-04-04java微信企業(yè)號開發(fā)之開發(fā)模式的開啟
這篇文章主要為大家詳細(xì)介紹了java微信企業(yè)號開發(fā)之開發(fā)模式的開啟方法,感興趣的小伙伴們可以參考一下2016-06-06MyBatis二級緩存實(shí)現(xiàn)關(guān)聯(lián)刷新
本文主要介紹了MyBatis二級緩存實(shí)現(xiàn)關(guān)聯(lián)刷新,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01MyBatis-Plus實(shí)現(xiàn)條件查詢的三種格式例舉詳解
本文主要介紹了MyBatis-Plus三中條件查詢格式的示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08詳解Java中Checked Exception與Runtime Exception 的區(qū)別
這篇文章主要介紹了詳解Java中Checked Exception與Runtime Exception 的區(qū)別的相關(guān)資料,這里提供實(shí)例幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下2017-08-08