91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

你是否還在寫try-catch-finally?來使用try-with-resources優雅地關閉

發布時間:2020-06-06 18:51:11 來源:網絡 閱讀:594 作者:kukelook 欄目:編程語言

你是否還在寫try-catch-finally?來使用try-with-resources優雅地關閉流吧
前言
開發中,我們常常需要在最后進行一些資源的關閉。比如讀寫文件流等,常見的,我們會在最后的finally里進行資源的關閉。但是這種寫法是很不簡潔的。其實,早在JDK1.7就已經引入了try-with-resources來關閉資源的方式,我們今天就來體驗一下try-with-resources的簡潔之處。

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

@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();
            }
        }
    }
}

這種寫法的麻煩之處在于,我們需要在finally塊中關閉資源,所以inputStream只能定義在try塊的外面。關閉之前,還需要做一步判空,避免因為inputStream為空而導致的空指針異常。這種寫法是很繁瑣的。

try-with-resources

同樣的功能,如果采用try-with-resources,就會使代碼變得非常簡潔:

@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關鍵字的后面跟一個括號,把需要關閉的資源定義在括號內。在try塊執行完之后會自動的釋放掉資源。

什么資源可以被try-with-resources自動關閉
并不是所有資源都可以被try-with-resources自動關閉的,只有實現了java.lang.AutoCloseable接口的類,才可以被自動關閉。如果沒有實現java.lang.AutoCloseable的類定義在try的括號內,則會在編譯器就報錯。

如,自定義一個類MyResource,定義在括號內則會報錯:提示需要java.lang.AutoCloseable的類。
你是否還在寫try-catch-finally?來使用try-with-resources優雅地關閉

自定義可以被自動關閉的類
我們也可以把自己的類編寫為可以被try-with-resources自動關閉的類,只需要我們去實現java.lang.AutoCloseable接口即可。

class MyResource implements java.lang.AutoCloseable {

    @Override
    public void close() {
        System.out.println("調用了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();
    }
}

執行之后,會輸出“調用了close方法”
你是否還在寫try-catch-finally?來使用try-with-resources優雅地關閉

總結
try-with-resources可以使代碼更加簡潔而且不容易出錯。相比傳統的try-catch-finally的寫法,顯然try-with-resources優點更多,至少不會存在finally關閉資源因為沒判空而導致空指針的問題。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

巴林右旗| 普宁市| 澄城县| 鸡西市| 健康| 洪江市| 如东县| 镇安县| 合阳县| 密山市| 茂名市| 玛沁县| 本溪市| 黔江区| 镶黄旗| 太仓市| 于都县| 兴义市| 佛教| 石台县| 连平县| 龙山县| 英山县| 清新县| 望江县| 穆棱市| 同德县| 灌阳县| 宁城县| 凤山市| 佛冈县| 西安市| 沅江市| 莱芜市| 潞城市| 正安县| 南汇区| 大冶市| 会东县| 邳州市| 宁远县|