国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java冷知識(shí):finally中的代碼一定會(huì)執(zhí)行嗎?

solocoder / 1114人閱讀

摘要:前言開發(fā)中,正常情況下,在執(zhí)行了代碼塊之后,中的代碼一定會(huì)執(zhí)行。上述在主線程和守護(hù)線程中都設(shè)置的原因是怕線程方法還未開始執(zhí)行主線程就退出了,這樣的話代碼塊中的內(nèi)容都不會(huì)執(zhí)行。當(dāng)然不是說(shuō)守護(hù)線程中的代碼一定不會(huì)執(zhí)行。

前言

Java開發(fā)中,正常情況下,在執(zhí)行了try代碼塊之后,finally中的代碼一定會(huì)執(zhí)行。我們實(shí)際開發(fā)也經(jīng)常會(huì)利用這個(gè)特性,在finally中來(lái)執(zhí)行一些特殊的操作,比如:釋放資源、釋放鎖等。

demo

public class Finally {
    public static void main(String[] args) {
        try {
            //正常業(yè)務(wù)邏輯
            System.out.println("I am try");
            throw new RuntimeException("I am RuntimeExecption");
        } catch (Exception e) {
            //異常處理
            System.out.println("I am Exception -> " + e.getMessage());
        } finally {
            //釋放資源等
            System.out.println("I am Finally");
        }
    }
}

execute

I am try
I am Exception -> I am RuntimeExecption
I am Finally

那么是不是finally中的代碼一定會(huì)被執(zhí)行呢?

其實(shí)不然,目前作者了解到有兩種情況下,finally中的代碼不會(huì)被執(zhí)行(不考慮try之前出現(xiàn)異常或者return的情況,換言之,在try之前出現(xiàn)異常或者return時(shí),try對(duì)應(yīng)的finally中的內(nèi)容不會(huì)被執(zhí)行)

finally之前虛擬機(jī)被停止

demo

public class Finally {
    public static void main(String[] args) {
        try {
            //正常業(yè)務(wù)邏輯
            System.out.println("I am try");
            throw new RuntimeException("I am RuntimeExecption");
        } catch (Exception e) {
            //異常處理
            System.out.println("I am Exception -> " + e.getMessage());
            System.exit(1);//異常關(guān)閉虛擬機(jī)
        } finally {
            //釋放資源等
            System.out.println("I am Finally");
        }
    }
}

execute

I am try
I am Exception -> I am RuntimeExecption

上面的代碼在出現(xiàn)了異常之后,使用System.exit(1)退出關(guān)閉虛擬機(jī),finally中的代碼當(dāng)然無(wú)法執(zhí)行。

守護(hù)線程中的finally

demo

public class Finally {
    public static void main(String[] args) throws Exception {
        Thread thread = new Thread(new Runnable() {
            public void run() {
                try {
                    //正常業(yè)務(wù)邏輯
                    System.out.println("I am try");
                    Thread.sleep(1000);
                } catch (Exception e) {
                    //異常處理
                    System.out.println("I am Exception -> " + e.getMessage());
                } finally {
                    //釋放資源等
                    System.out.println("I am Finally");
                }
            }
        });
        thread.setDaemon(true);
        thread.start();
        Thread.sleep(1000);
        System.out.println("end");
    }
}

execute

I am try
end

使用setDaemon(true)方法來(lái)設(shè)置線程為守護(hù)線程,從打印結(jié)果中可以看到,守護(hù)線程中,try代碼塊中的代碼執(zhí)行了,finally代碼塊未必執(zhí)行。主要原因是因?yàn)槭刈o(hù)線程會(huì)隨著所有非守護(hù)線程的退出而退出。上述在主線程和守護(hù)線程中都設(shè)置sleep(1000)的原因是怕線程run()方法還未開始執(zhí)行主線程就退出了,這樣的話try代碼塊中的內(nèi)容都不會(huì)執(zhí)行。當(dāng)然不是說(shuō)守護(hù)線程中的finally代碼一定不會(huì)執(zhí)行。

總結(jié)

java中,如果想要執(zhí)行try中的代碼之后,不允許再執(zhí)行finally中的代碼,有以下兩種方式:

使用System.exit(1)來(lái)退出虛擬機(jī)

把當(dāng)前執(zhí)行trycatchfinally代碼的線程設(shè)置為守護(hù)線程

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/74364.html

相關(guān)文章

  • 編程知識(shí) --- 多余的局部變量final

    摘要:奇怪的代碼行這里第一行為什么加了而且還要聲明一個(gè)局部變量探尋緣由經(jīng)過(guò)搜索找到的解釋本質(zhì)上是由于內(nèi)存模型和之間的不同如果我們直接使用函數(shù)內(nèi)使用的執(zhí)行時(shí)序函數(shù)僅會(huì)保存的指針會(huì)在使用的地方通過(guò)指針獲取對(duì)象然后再調(diào)用相應(yīng)方法例如好像還可以接受嘛但 奇怪的代碼 JDK 1.8 | java.util.concurrent.locks.ReentrantLock | 125行 /** * Pe...

    sherlock221 評(píng)論0 收藏0
  • 2019 Android 高級(jí)面試題總結(jié)

    摘要:子線程往消息隊(duì)列發(fā)送消息,并且往管道文件寫數(shù)據(jù),主線程即被喚醒,從管道文件讀取數(shù)據(jù),主線程被喚醒只是為了讀取消息,當(dāng)消息讀取完畢,再次睡眠。因此的循環(huán)并不會(huì)對(duì)性能有過(guò)多的消耗。 說(shuō)下你所知道的設(shè)計(jì)模式與使用場(chǎng)景 a.建造者模式: 將一個(gè)復(fù)雜對(duì)象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過(guò)程可以創(chuàng)建不同的表示。 使用場(chǎng)景比如最常見(jiàn)的AlertDialog,拿我們開發(fā)過(guò)程中舉例,比如Camera...

    wums 評(píng)論0 收藏0
  • 廣州三本找Java實(shí)習(xí)經(jīng)歷

    摘要:廣州三本大三在讀,在廣州找實(shí)習(xí)。這篇文章其實(shí)主要是記錄一下自己的面試經(jīng)歷,希望大家看完之后能有所了解進(jìn)入中小公司究竟需要什么水平。時(shí)間復(fù)雜度盡量低一些使用快排的,將給出的隨機(jī)數(shù)做基準(zhǔn)值返回的坐標(biāo)就是了。 前言 只有光頭才能變強(qiáng) 這陣子跑去面試Java實(shí)習(xí)生啦~~~我來(lái)簡(jiǎn)單介紹一下背景吧。 廣州三本大三在讀,在廣州找實(shí)習(xí)。大學(xué)開始接觸編程,一個(gè)非常平庸的人。 在學(xué)習(xí)編程時(shí),跟我類似的人應(yīng)...

    enali 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<