日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java 异常处理中对于 finally 的一些思考

發(fā)布時(shí)間:2025/3/21 java 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 异常处理中对于 finally 的一些思考 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、前言

因?yàn)檫@次面試有問(wèn)到一些同學(xué)finally的問(wèn)題,發(fā)現(xiàn)自己這塊好像有點(diǎn)記不太清楚了,有的點(diǎn)可能還給人家說(shuō)錯(cuò)了,一度弄得場(chǎng)面有些尷尬。所以說(shuō)這篇文章深入研究一下finally的執(zhí)行情況和返回值的情況。

二、finally一定會(huì)執(zhí)行嗎?

先給答案:肯定不是。

我們可以看兩種情況:

1.在執(zhí)行try塊之前直接return,我們發(fā)現(xiàn)finally塊是不會(huì)執(zhí)行的

public?class?TryCatchTest?{private?static?int?total()?{int?i?=?11;if?(i?==?11)?{return?i;}try?{System.out.println("執(zhí)行try");}?finally?{System.out.println("執(zhí)行finally");}return?0;}public?static?void?main(String[]?args)?{System.out.println("執(zhí)行main:"?+?total());} } 輸出結(jié)果: 執(zhí)行main:11

2.在執(zhí)行try塊之前制造一個(gè)錯(cuò)誤,直接爆紅

public?class?TryCatchTest?{private?static?int?total()?{return?1?/?0;try?{System.out.println("執(zhí)行try");??//這行爆紅,原因就是無(wú)法訪問(wèn)}?finally?{System.out.println("執(zhí)行finally");}return?0;}public?static?void?main(String[]?args)?{System.out.println("執(zhí)行main:"?+?total());} }

綜上我們看出,如果程序連try塊都執(zhí)行不到,那么finally塊自然就不會(huì)執(zhí)行到了

不過(guò)這里有的同學(xué)就會(huì)問(wèn):如果執(zhí)行了try塊,finally塊一定會(huì)執(zhí)行嗎?有的同學(xué)答案就是一定會(huì),其實(shí)非然,看看下面的例子吧:

public?class?TryCatchTest?{private?static?int?total()?{try?{System.out.println("執(zhí)行try");System.exit(0);}?catch?(Exception?e)?{System.out.println("執(zhí)行catch");}?finally?{System.out.println("執(zhí)行finally");}return?0;}public?static?void?main(String[]?args)?{System.out.println("執(zhí)行main:"?+?total());} } 輸出結(jié)果: 執(zhí)行try

我們?cè)趫?zhí)行try塊之中退出jvm,就沒(méi)事了,都不執(zhí)行了。當(dāng)然這個(gè)情況是比較極端的,記住就行,沒(méi)事不要亂整這個(gè)。最后總結(jié)一下:不管是給try塊中造了個(gè)異常,還是在try塊中進(jìn)行return,我們發(fā)現(xiàn)finally塊還是會(huì)執(zhí)行的。因?yàn)楫惓L幚碓O(shè)計(jì)初衷就是讓finally塊始終執(zhí)行。這個(gè)總結(jié)在finally的執(zhí)行時(shí)機(jī)得到證明。

三、finally執(zhí)行時(shí)機(jī)探討

首先看常規(guī)情況:

public?class?TryCatchTest?{private?static?int?total()?{try?{System.out.println("執(zhí)行try");return?11;}?finally?{System.out.println("執(zhí)行finally");}}public?static?void?main(String[]?args)?{System.out.println("執(zhí)行main:"?+?total());} } 輸出結(jié)果:執(zhí)行try執(zhí)行finally執(zhí)行main:11

分析一下,不難得出在這個(gè)例子中finally塊執(zhí)行在try塊的return之前。我們給try塊中造一個(gè)異常:

public?class?TryCatchTest?{private?static?int?total()?{try?{System.out.println("執(zhí)行try");return?1?/?0;}?catch?(Exception?e)?{System.out.println("執(zhí)行catch");return?11;}?finally?{System.out.println("執(zhí)行finally");}}public?static?void?main(String[]?args)?{System.out.println("執(zhí)行main:"?+?total());} } 輸出結(jié)果:執(zhí)行try執(zhí)行catch執(zhí)行finally執(zhí)行main:11

同樣的,finally執(zhí)行在catch塊return的執(zhí)行前

四、finally塊中的返回值

1.finally塊不含返回值,但是做改變變量值的操作

看一個(gè)例子:

public?class?TryCatchTest?{private?static?int?total()?{int?i?=?0;try?{System.out.println("執(zhí)行try:"?+?i);return?i;}?finally?{++i;System.out.println("執(zhí)行finally:"?+?i);}}public?static?void?main(String[]?args)?{System.out.println("執(zhí)行main:"?+?total());} } 輸出結(jié)果: 執(zhí)行try:0 執(zhí)行finally:1 執(zhí)行main:0

如果看完前面分析,會(huì)發(fā)現(xiàn)跟想象的不太一樣。我們經(jīng)過(guò)前面的分析,finally塊的執(zhí)行時(shí)機(jī)應(yīng)該是return之前,那理論上我們應(yīng)該先++i使得i等于1,在執(zhí)行return i;?自然會(huì)返回1。可是結(jié)果卻返回了0,這是因?yàn)镴ava程序會(huì)把try或者catch塊中的返回值保留,也就是暫時(shí)的確認(rèn)了返回值,然后再去執(zhí)行finally代碼塊中的語(yǔ)句。等到finally代碼塊執(zhí)行完畢后,如果finally塊中沒(méi)有返回值的話,就把之前保留的返回值返回出去。

2.finally中含有返回值

示例1:

public?class?TryCatchTest?{private?static?int?total()?{try?{System.out.println("執(zhí)行try");return?1;}?finally?{System.out.println("執(zhí)行finally");return?2;}}public?static?void?main(String[]?args)?{System.out.println("執(zhí)行main:"?+?total());} } 輸出結(jié)果: 執(zhí)行try 執(zhí)行finally 執(zhí)行main:2

示例2:

public?class?TryCatchTest?{private?static?int?total()?{int?i?=?1;try?{System.out.println("執(zhí)行try:"?+?i);return?i;}?finally?{++i;System.out.println("執(zhí)行finally:"?+?i);return?i;}}public?static?void?main(String[]?args)?{System.out.println("執(zhí)行main:"?+?total());} } 輸出結(jié)果: 執(zhí)行try:1 執(zhí)行finally:2 執(zhí)行main:2

示例3:

public?class?TryCatchTest?{private?static?int?total()?{int?i?=?1;try?{System.out.println("執(zhí)行try:"?+?i);}?finally?{++i;System.out.println("執(zhí)行finally:"?+?i);}return?i;}public?static?void?main(String[]?args)?{System.out.println("執(zhí)行main:"?+?total());} } 執(zhí)行結(jié)果: 執(zhí)行try:1 執(zhí)行finally:2 執(zhí)行main:2

這三個(gè)示例都說(shuō)明了一點(diǎn),在分析含有finally塊的方法返回值時(shí),要對(duì)于return出現(xiàn)的地方進(jìn)行具體分析。在finally塊中進(jìn)行return操作的話,則方法整體的返回值就是finally塊中的return返回值。如果在finally塊之后的方法內(nèi)return,則return的值就是進(jìn)行完上面的操作后的return值。

總結(jié)

以上是生活随笔為你收集整理的Java 异常处理中对于 finally 的一些思考的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 久色99 | 色之久久综合 | 国产一区美女 | av动态| 国精产品一区一区三区免费视频 | 综合激情久久 | 一区二区视频免费观看 | 午夜影院试看 | 亚洲精品日韩丝袜精品 | 丰满少妇大力进入 | 欧美高清精品 | 高清在线一区二区 | 黄色永久免费网站 | 成人区人妻精品一区 | 秋霞精品一区二区三区 | 青青草成人影视 | 日本人六九视频 | 国产91在线视频观看 | 国产精品一区二区久久国产 | 亚洲精品乱码久久 | 看看毛片 | 日批视频| 伊人看片| 国产精品theporn | 久久久久三级 | 成人手机视频 | 99精品视频一区二区三区 | 黄色应用在线观看 | 曰韩毛片 | 亚洲三级在线 | 永久视频在线观看 | 精品嫩模一区二区三区 | 天天碰天天碰 | 超碰在线免费97 | 欧美另类自拍 | 五月天婷婷丁香花 | 成年人免费大片 | 夜夜欢天天干 | 午夜视频色 | 私密spa按摩按到高潮 | 97久久人国产精品婷婷 | 女教师痴汉调教hd中字 | 中文字幕免费播放 | 国产精品久久久91 | 激情四射综合网 | 91精品国产色综合久久不8 | 青青在线视频观看 | www.日本com| 丁香花在线影院观看在线播放 | 99热伊人 | 制服.丝袜.亚洲.中文.综合懂色 | 国产成人亚洲欧洲在线 | 中文字幕激情视频 | 人妻妺妺窝人体色www聚色窝 | 午夜免费视频网站 | 国产伦精品一区二区三区免.费 | 丁香花国语版普通话 | 欧美一级网址 | 欧美亚洲激情视频 | 亚洲成人免费在线视频 | 五月婷婷一区 | 亚洲综合五月天 | 一及黄色大片 | 香蕉手机网 | 国产精品系列在线观看 | 亚洲va欧美va国产综合久久 | 亚洲欧洲久久久 | 羞羞羞网站 | 国产成人免费观看 | 日日免费视频 | 欧美色xxx | 黄色欧美一级片 | 天堂av一区二区 | 我要看免费黄色片 | 亚洲国产精品一区二区尤物区 | 日韩欧美久久精品 | 激情片| 在线97 | av国产一区 | 天天在线免费视频 | 96精品国产| 无码视频在线观看 | 久草国产在线观看 | 欧美成在线观看 | av国产网站| 亚洲欧美少妇 | 欧美 日韩 国产 在线观看 | 欧美性大战久久久久久 | 色xxxx| 理论片琪琪午夜电影 | 亚洲视频中文字幕在线观看 | 绯色av一区二区三区高清 | 五月婷婷色综合 | 国产视频在线观看视频 | 美女网站在线免费观看 | 人妻精品无码一区二区 | 日韩一区二区欧美 | 老湿机69福利区午夜x片 | 国产精品精东影业 |