欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

你是否還在寫(xiě)try-catch-finally?來(lái)使用try-with-resources優(yōu)雅地關(guān)閉

你是否還在寫(xiě)try-catch-finally?來(lái)使用try-with-resources優(yōu)雅地關(guān)閉流吧
前言
開(kāi)發(fā)中,我們常常需要在最后進(jìn)行一些資源的關(guān)閉。比如讀寫(xiě)文件流等,常見(jiàn)的,我們會(huì)在最后的finally里進(jìn)行資源的關(guān)閉。但是這種寫(xiě)法是很不簡(jiǎn)潔的。其實(shí),早在JDK1.7就已經(jīng)引入了try-with-resources來(lái)關(guān)閉資源的方式,我們今天就來(lái)體驗(yàn)一下try-with-resources的簡(jiǎn)潔之處。

創(chuàng)新互聯(lián)建站是專(zhuān)業(yè)的大峪網(wǎng)站建設(shè)公司,大峪接單;提供成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專(zhuān)業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行大峪網(wǎng)站開(kāi)發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專(zhuān)業(yè)做搜索引擎喜愛(ài)的網(wǎng)站,專(zhuān)業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!

舊版關(guān)閉資源的一些例子
在舊版的寫(xiě)法中(其實(shí)現(xiàn)在還有很多程序員是這么寫(xiě)的),資源都放在finally塊里進(jìn)行關(guān)閉,如下:

@Test
public void test4() {
    InputStream inputStream = null;
    try {
        inputStream = new FileInputStream("D:\\head.jpg");
        // do something
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (inputStream != null) {
            try {
                inputStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

這種寫(xiě)法的麻煩之處在于,我們需要在finally塊中關(guān)閉資源,所以inputStream只能定義在try塊的外面。關(guān)閉之前,還需要做一步判空,避免因?yàn)閕nputStream為空而導(dǎo)致的空指針異常。這種寫(xiě)法是很繁瑣的。

try-with-resources

同樣的功能,如果采用try-with-resources,就會(huì)使代碼變得非常簡(jiǎn)潔:

@Test
public void test5() {
    try (InputStream inputStream = new FileInputStream("D:\\head.jpg")) {
        byte[] bytes = inputStream.readAllBytes();
        // do something
    } catch (IOException e) {
        e.printStackTrace();
    }
}

try-with-resources的用法就是,在try關(guān)鍵字的后面跟一個(gè)括號(hào),把需要關(guān)閉的資源定義在括號(hào)內(nèi)。在try塊執(zhí)行完之后會(huì)自動(dòng)的釋放掉資源。

什么資源可以被try-with-resources自動(dòng)關(guān)閉
并不是所有資源都可以被try-with-resources自動(dòng)關(guān)閉的,只有實(shí)現(xiàn)了java.lang.AutoCloseable接口的類(lèi),才可以被自動(dòng)關(guān)閉。如果沒(méi)有實(shí)現(xiàn)java.lang.AutoCloseable的類(lèi)定義在try的括號(hào)內(nèi),則會(huì)在編譯器就報(bào)錯(cuò)。

如,自定義一個(gè)類(lèi)MyResource,定義在括號(hào)內(nèi)則會(huì)報(bào)錯(cuò):提示需要java.lang.AutoCloseable的類(lèi)。
你是否還在寫(xiě)try-catch-finally?來(lái)使用try-with-resources優(yōu)雅地關(guān)閉

自定義可以被自動(dòng)關(guān)閉的類(lèi)
我們也可以把自己的類(lèi)編寫(xiě)為可以被try-with-resources自動(dòng)關(guān)閉的類(lèi),只需要我們?nèi)?shí)現(xiàn)java.lang.AutoCloseable接口即可。

class MyResource implements java.lang.AutoCloseable {

    @Override
    public void close() {
        System.out.println("調(diào)用了close方法");
    }
}
@Test
public void test5() {
    try (InputStream inputStream = new FileInputStream("D:\\head.jpg");
         MyResource myResource = new MyResource()) {
        byte[] bytes = inputStream.readAllBytes();
        // do something
    } catch (IOException e) {
        e.printStackTrace();
    }
}

執(zhí)行之后,會(huì)輸出“調(diào)用了close方法”
你是否還在寫(xiě)try-catch-finally?來(lái)使用try-with-resources優(yōu)雅地關(guān)閉

總結(jié)
try-with-resources可以使代碼更加簡(jiǎn)潔而且不容易出錯(cuò)。相比傳統(tǒng)的try-catch-finally的寫(xiě)法,顯然try-with-resources優(yōu)點(diǎn)更多,至少不會(huì)存在finally關(guān)閉資源因?yàn)闆](méi)判空而導(dǎo)致空指針的問(wèn)題。

分享題目:你是否還在寫(xiě)try-catch-finally?來(lái)使用try-with-resources優(yōu)雅地關(guān)閉
網(wǎng)站地址:http://chinadenli.net/article38/geedpp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航手機(jī)網(wǎng)站建設(shè)移動(dòng)網(wǎng)站建設(shè)網(wǎng)站營(yíng)銷(xiāo)小程序開(kāi)發(fā)靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站