談?wù)凧ava中try-catch-finally中的return語(yǔ)句
我們知道return語(yǔ)句用在某一個(gè)方法中,一是用于返回函數(shù)的執(zhí)行結(jié)果,二是用于返回值為void類型的函數(shù)中,僅僅是一個(gè)return語(yǔ)句(return ;),此時(shí)用于結(jié)束方法的執(zhí)行,也即此return后的語(yǔ)句將不會(huì)被執(zhí)行,當(dāng)然,這種情況下return語(yǔ)句后不能再有其它的語(yǔ)句了。
在try-catch-finally語(yǔ)句中使用return語(yǔ)句遇到了一些疑問(wèn)
代碼一:
static int intc(){
int x =0;
try{
x=1;
return x;
}finally {
x = 3;
}
}
代碼二:在上面那段代碼的finally語(yǔ)句中加入了return語(yǔ)句
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ū)域來(lái)存儲(chǔ)方法的返回值,在執(zhí)行返回語(yǔ)句時(shí)便會(huì)從這個(gè)區(qū)域中讀取值進(jìn)行返回。
代碼一中在try中將1賦值給變量x,然后將變量x的值復(fù)制到存儲(chǔ)返回值的區(qū)域,最后返回值區(qū)域存儲(chǔ)的就是1,執(zhí)行返回語(yǔ)句時(shí)便返回一。
而在代碼二中,同樣將1賦值給變量x,然后將x的值復(fù)制到存儲(chǔ)返回值的區(qū)域,此時(shí)返回值的區(qū)域的值為1,然后跳轉(zhuǎn)到finally語(yǔ)句中,此時(shí)將3賦值給局部變量x,然后在將x的 值復(fù)制到存儲(chǔ)返回值的區(qū)域,最后執(zhí)行返回語(yǔ)句,讀取到的返回區(qū)域中的值就是3.
代碼三中,try中執(zhí)行的語(yǔ)句是一樣的,跳轉(zhuǎn)到了finally語(yǔ)句中后,將3賦值給局部變量,然后將0賦值到存儲(chǔ)返回值的區(qū)域,最后執(zhí)行返回語(yǔ)句,讀取到的返回區(qū)域中的值就是 0,所以就返回0。
相關(guān)文章
Mybatis實(shí)現(xiàn)傳入多個(gè)參數(shù)的四種方法詳細(xì)講解
這篇文章主要介紹了Mybatis實(shí)現(xiàn)傳入多個(gè)參數(shù)的四種方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-01-01
Java實(shí)現(xiàn)權(quán)重隨機(jī)算法詳解
平時(shí),經(jīng)常會(huì)遇到權(quán)重隨機(jī)算法,從不同權(quán)重的N個(gè)元素中隨機(jī)選擇一個(gè),并使得總體選擇結(jié)果是按照權(quán)重分布的。本文就詳細(xì)來(lái)介紹如何實(shí)現(xiàn),感興趣的可以了解一下2021-07-07
java String類常量池分析及"equals"和"==”區(qū)別詳細(xì)介紹
這篇文章主要介紹了java String類常量池分析及"equals"和"==”區(qū)別詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-12-12
Mybatis generator mapper文件覆蓋原文件的示例代碼
這篇文章主要介紹了Mybatis generator mapper文件覆蓋原文件,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-11-11
idea mybatis配置log4j打印sql語(yǔ)句的示例
本篇文章主要介紹了idea mybatis配置log4j打印sql語(yǔ)句的示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01

