最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java語言中finally是否一定會(huì)執(zhí)行你知道嗎

 更新時(shí)間:2022年02月23日 15:10:43   作者:小夏陌  
這篇文章主要為大家詳細(xì)介紹了Java finally是否一定會(huì)執(zhí)行,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

簡(jiǎn)介

我們都知道,finally 作為異常處理的一部分,它只能緊跟在try/catch語句后,附帶一個(gè)語句塊,表示這段語句,“在正常情況下”,最終一定會(huì)被執(zhí)行(不管有沒有拋出異常),經(jīng)常被用在需要釋放資源的情況下。那么在我們的應(yīng)用在運(yùn)行中,一定會(huì)運(yùn)行finally代碼塊嗎?其實(shí)不是的,有以下幾種情況我們的finally代碼塊是不會(huì)運(yùn)行的。

finally 代碼塊不會(huì)運(yùn)行的情況

情況一:代碼流程并未進(jìn)入try語句塊

這也是最好理解的情況,如果代碼流程不進(jìn)入try代碼塊,則相應(yīng)的catch和finally代碼塊自然不會(huì)執(zhí)行。

	public static void main(String[] args) {
        int i = 0;
        System.out.println("enter main block");
        boolean flag = false;
        if (flag) {
            try {
                System.out.println("enter try block");
                i = i / i;
            } catch (Exception e) {
                System.out.println("enter catch block");
            }finally {
                System.out.println("enter finally block");
            }
        }
    }

運(yùn)行結(jié)果為:

enter main block

情況二: 使用了 System.exit(int) 退出程序

在進(jìn)入try或catch塊后,使用了 System.exit(int) 退出程序。

	public static void main(String[] args) {
        int i = 0;
        System.out.println("enter main block");
        try {
            System.out.println("enter try block");
            System.exit(0);
            i = i / i;
        } catch (Exception e) {
            System.out.println("enter catch block");
        } finally {
            System.out.println("enter finally block");
        }
    }

public static void main(String[] args) {
        int i = 0;
        System.out.println("enter main block");
        try {
            System.out.println("enter try block");
            i = i / i;
        } catch (Exception e) {
            System.exit(0);
            System.out.println("enter catch block");
        } finally {
            System.out.println("enter finally block");
        }
    }

運(yùn)行結(jié)果為:

enter main block
enter try block

但是呢,如果 System.exit(int) 在try代碼塊異常語句之后, finally 還是會(huì)被執(zhí)行,因?yàn)橐呀?jīng)沒有機(jī)會(huì)執(zhí)行 System.exit(int) ,程序已經(jīng)退出了,比如:

	public static void main(String[] args) {
        int i = 0;
        System.out.println("enter main block");
        try {
            System.out.println("enter try block");
            i = i / i;
            System.exit(0);
        } catch (Exception e) {
            System.out.println("enter catch block");
        } finally {
            System.out.println("enter finally block");
        }
    }

運(yùn)行結(jié)果為:

enter main block
enter try block
enter catch block
enter finally block

情況三:程序所在的線程死亡

在當(dāng)前線程死亡的情況下,finally里的語句也不會(huì)執(zhí)行,比如干擾中斷,或者程序外部kill該線程,或者是意外中止。

	public static void main(String[] args) {
        int i = 0;
        System.out.println("enter main block");
        try {
            System.out.println("enter try block");
            // 模擬執(zhí)行任務(wù)10s,然后在執(zhí)行任務(wù)過程中殺死該線程
            Thread.sleep(10 * 1000);
            i = i / i;
        } catch (Exception e) {
            System.out.println("enter catch block");
        } finally {
            System.out.println("enter finally block");
        }
    }

這里在休眠里,用kill命令,殺死該線程,模擬非正常退出,最后運(yùn)行結(jié)果為:

enter main block
enter try block

這里值得注意的是,我們常常在try語句塊里獲取了一些臨界資源,然后finally語句塊里釋放該資源。此時(shí),如果正常獲得取資源后,程序非正常中斷,則我們并未正常釋放該資源,就會(huì)導(dǎo)致資源可能會(huì)被無限占用,所以這里要考慮一下其它的解決方法,比如給資源設(shè)置一個(gè)使用時(shí)間等,到期自動(dòng)收回。

情況四:其它非正常退出

還有其它非正常退出(道理同上,就不演示了),也會(huì)導(dǎo)致finally代碼塊不執(zhí)行,比如物理關(guān)閉電源,關(guān)閉 CPU等。這些其實(shí)在開發(fā)生產(chǎn)環(huán)境中是常有出現(xiàn)的,比如在開發(fā)中,某一臺(tái)服務(wù)器獲取鎖后,不小心斷電或宕機(jī)了(未成功釋放鎖),然后導(dǎo)致別的機(jī)器也不能獲得到鎖(如果鎖無時(shí)間限制),最終導(dǎo)致出現(xiàn)系統(tǒng)型的問題。完事以后,你們開發(fā)也不知道發(fā)生了什么事,就把所有服務(wù)都重啟了一次,解決了問題,最后說一句:“??!還是重啟大法好”。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容! 

相關(guān)文章

  • SpringBoot注解@CrossOrigin使用詳解

    SpringBoot注解@CrossOrigin使用詳解

    這篇文章主要介紹了SpringBoot注解@CrossOrigin使用詳解,@CrossOrigin是用來處理跨域請(qǐng)求的注解
    跨域,指的是瀏覽器不能執(zhí)行其他網(wǎng)站的腳本,它是由瀏覽器的同源策略造成的,是瀏覽器對(duì)JavaScript施加的安全限制,需要的朋友可以參考下
    2023-12-12
  • 詳解SpringBoot是如何保證接口安全的

    詳解SpringBoot是如何保證接口安全的

    對(duì)于互聯(lián)網(wǎng)來說,只要你系統(tǒng)的接口會(huì)暴露在外網(wǎng),就避免不了接口安全問題。?如果你的接口在外網(wǎng)裸奔,只要讓黑客知道接口的地址和參數(shù)就可以調(diào)用,那簡(jiǎn)直就是災(zāi)難。這篇文章主要介紹了SpringBoot保證接口安全的方法,需要的可以參考一下
    2023-02-02
  • SpringBoot各種事務(wù)操作實(shí)戰(zhàn)(自動(dòng)回滾、手動(dòng)回滾、部分回滾)

    SpringBoot各種事務(wù)操作實(shí)戰(zhàn)(自動(dòng)回滾、手動(dòng)回滾、部分回滾)

    本文主要介紹了SpringBoot各種事務(wù)操作實(shí)戰(zhàn),包含自動(dòng)回滾、手動(dòng)回滾、部分回滾這三種,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • 統(tǒng)一建模語言_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    統(tǒng)一建模語言_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了統(tǒng)一建模語言的相關(guān)知識(shí),非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧
    2017-06-06
  • 基于mybatis like %%的問題

    基于mybatis like %%的問題

    這篇文章主要介紹了mybatis like %%的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • springboot如何使用yml文件方式配置shardingsphere

    springboot如何使用yml文件方式配置shardingsphere

    這篇文章主要介紹了springboot如何使用yml文件方式配置shardingsphere問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Java實(shí)現(xiàn)排球比賽計(jì)分系統(tǒng)

    Java實(shí)現(xiàn)排球比賽計(jì)分系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)排球比賽計(jì)分系統(tǒng),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • java排序高級(jí)之選擇排序?qū)崿F(xiàn)方法

    java排序高級(jí)之選擇排序?qū)崿F(xiàn)方法

    這篇文章主要介紹了java排序高級(jí)之選擇排序?qū)崿F(xiàn)方法,較為全面的分析了選擇排序的原理與具體實(shí)現(xiàn)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-02-02
  • 手把手帶你實(shí)現(xiàn)第一個(gè)Mybatis程序

    手把手帶你實(shí)現(xiàn)第一個(gè)Mybatis程序

    這篇文章主要介紹了mybatis實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-07-07
  • 通過Java實(shí)現(xiàn)中文分詞與文本關(guān)鍵詞提取

    通過Java實(shí)現(xiàn)中文分詞與文本關(guān)鍵詞提取

    這篇文章主要為大家詳細(xì)介紹了如何利用Java實(shí)現(xiàn)中文分詞以及文本關(guān)鍵詞提取功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)學(xué)習(xí)
    2023-06-06

最新評(píng)論

平塘县| 新龙县| 正镶白旗| 闸北区| 道孚县| 阆中市| 集安市| 毕节市| 修水县| 穆棱市| 池州市| 获嘉县| 白朗县| 内黄县| 宁晋县| 舞钢市| 紫阳县| 武川县| 海口市| 大庆市| 岳阳县| 揭西县| 鱼台县| 山阳县| 仙游县| 大洼县| 宁波市| 略阳县| 密云县| 明光市| 乐至县| 乌兰县| 琼海市| 镇远县| 桐庐县| 资源县| 兴文县| 长治县| 竹山县| 和平县| 连云港市|