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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Finally语句块的运行

發(fā)布時間:2023/12/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Finally语句块的运行 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、finally語句塊是否一定運行?

Java中異常捕獲機制try...catch...finally塊中的finally語句是不是一定會被運行?非常多人都說不是。當然他們的回答是正確的,經(jīng)過試驗。至少下面有兩種情況下finally語句是不會被運行的:

(1)異常捕獲機制finally塊與try和catch塊是關(guān)聯(lián)的。既然是關(guān)聯(lián)的假設try...catch...finally語句邏輯上達不到?jīng)]有被運行,如在try語句之前就返回了,這樣finally語句就不會運行,這也說明了finally語句被運行的必要而非充分條件是:對應的try...catch...finally語句一定被運行到。

(2)在try塊中有System.exit(0);這種語句,System.exit(0);是終止Java虛擬機JVM的。連JVM都停止了。所以都結(jié)束了,當然finally語句也不會被運行到。


二、finally語句塊是否一定會運行,遇到return怎么辦?

public class FinallyTest1 {public void test(){try{System.out.println("Try statement block……");return ;}catch(Exception e){System.out.println("Exception statement block……");}finally{System.out.println("在try語句塊中return你再強大,也影響不了我finally語句塊的繼續(xù)運行,嘿嘿……");}}public static void main(String[] args) {FinallyTest1 t=new FinallyTest1();t.test();} }/*運行結(jié)果:Try statement block……在try語句塊中return你再強大,也影響不了我finally語句塊的繼續(xù)運行,嘿嘿……總結(jié):finally語句塊的運行不會受到try語句塊中的return的影響。

*/


三、finally語句塊不受return語句的影響。哪finally語句塊究竟是在return之前還是之后運行?

public class FinallyTest2 {private int test(){ int a=520;try{return a+=1314000;}catch(Exception e){System.out.println();}finally{System.out.println("Finally運行,a值為:"+a);a=0;System.out.println("小鬧了一下(a=0),嘿嘿!

"); } return 250; } public static void main(String[] args) { FinallyTest2 t=new FinallyTest2(); System.out.println("方法返回(return) :"+t.test()); } } /* 運行結(jié)果: Finally運行,a值為:1314520 小鬧一下(a=0),嘿嘿。 方法返回(return) :1314520 總結(jié): 在try語句塊中運行到了return時,并非馬上返回而是把return要返回的值計算出來先保存到內(nèi)存中, 然后去運行finally語句塊。然后再返回之前保存要return的值。

*/



四、在返回之前運行在finally塊中的語句,哪finally塊中也return會怎么樣呢?

public class FinallyTest3 {//@SuppressWarnings 批注同意您選擇性地取消特定代碼段(即,類或方法)中的警告。@SuppressWarnings("finally") private int test(){ try{return 520;}catch(Exception e){System.out.println();}finally{return 5820; //此處return語句會產(chǎn)生警告}}public static void main(String[] args) {FinallyTest3 t=new FinallyTest3();System.out.println("方法返回(return) :"+t.test());} } /* 執(zhí)行結(jié)果:方法返回(return) :5820總結(jié):假設try和finally都有return 語句。則返回值以最后一個return語句的值作為返回,前面的一個被默認的犧牲啦。 */



總結(jié)

以上是生活随笔為你收集整理的Finally语句块的运行的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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