談?wù)凧ava中try-catch-finally中的return語句
我們知道return語句用在某一個(gè)方法中,一是用于返回函數(shù)的執(zhí)行結(jié)果,二是用于返回值為void類型的函數(shù)中,僅僅是一個(gè)return語句(return ;),此時(shí)用于結(jié)束方法的執(zhí)行,也即此return后的語句將不會(huì)被執(zhí)行,當(dāng)然,這種情況下return語句后不能再有其它的語句了。
在try-catch-finally語句中使用return語句遇到了一些疑問
代碼一:
static int intc(){ int x =0; try{ x=1; return x; }finally { x = 3; } }
代碼二:在上面那段代碼的finally語句中加入了return語句
static int intc(){ int x =0; try{ x=1; return x; }finally { x = 3; return x; } }
代碼三:
static int intc(){ int x =0; try{ x=1; return x; }finally { x = 3; return 0; } }
那么這三個(gè)方法的執(zhí)行結(jié)果是多少呢?
代碼一:返回1;
代碼二:返回3;
代碼三:返回0;
其中的原理是怎么回事呢?
原因是java虛擬機(jī)在執(zhí)行具有返回值的方法時(shí),會(huì)在本地變量列表中創(chuàng)建一塊區(qū)域來存儲(chǔ)方法的返回值,在執(zhí)行返回語句時(shí)便會(huì)從這個(gè)區(qū)域中讀取值進(jìn)行返回。
代碼一中在try中將1賦值給變量x,然后將變量x的值復(fù)制到存儲(chǔ)返回值的區(qū)域,最后返回值區(qū)域存儲(chǔ)的就是1,執(zhí)行返回語句時(shí)便返回一。
而在代碼二中,同樣將1賦值給變量x,然后將x的值復(fù)制到存儲(chǔ)返回值的區(qū)域,此時(shí)返回值的區(qū)域的值為1,然后跳轉(zhuǎn)到finally語句中,此時(shí)將3賦值給局部變量x,然后在將x的 值復(fù)制到存儲(chǔ)返回值的區(qū)域,最后執(zhí)行返回語句,讀取到的返回區(qū)域中的值就是3.
代碼三中,try中執(zhí)行的語句是一樣的,跳轉(zhuǎn)到了finally語句中后,將3賦值給局部變量,然后將0賦值到存儲(chǔ)返回值的區(qū)域,最后執(zhí)行返回語句,讀取到的返回區(qū)域中的值就是 0,所以就返回0。
相關(guān)文章
關(guān)于Java中Object類的幾個(gè)方法示例
這篇文章主要給大家介紹了關(guān)于Java中Object類的幾個(gè)方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05Springboot中PropertySource的結(jié)構(gòu)與加載過程逐步分析講解
本文重點(diǎn)講解一下Spring中@PropertySource注解的使用,PropertySource主要是對(duì)屬性源的抽象,包含屬性源名稱name和屬性源內(nèi)容對(duì)象source。其方法主要是對(duì)這兩個(gè)字段進(jìn)行操作2023-01-01java實(shí)現(xiàn)遠(yuǎn)程桌面的實(shí)例代碼
下面小編就為大家分享一篇java實(shí)現(xiàn)遠(yuǎn)程桌面的實(shí)例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01計(jì)算一個(gè)Java對(duì)象占用字節(jié)數(shù)的方法
這篇文章主要介紹了計(jì)算一個(gè)Java對(duì)象占用字節(jié)數(shù)的方法,較為詳細(xì)的分析了Java中各類對(duì)象所占用的字節(jié)數(shù),需要的朋友可以參考下2015-01-01