亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JDK9新特性實戰(zhàn):簡化流關(guān)閉新姿勢。

dailybird / 537人閱讀

摘要:如下面的,定義成局部變量可以不用,局部變量可以等同于,但定義成成員變量就必須是用修飾的,不然會編譯錯誤。雖然簡化了,但感覺還是沒有什么質(zhì)的變化,實際用途我們可能不希望關(guān)心資源的關(guān)閉,或者在方法結(jié)束之后如果是局部變量它就能自動關(guān)閉。

做Java開發(fā)的都知道,每個資源的打開都需要對應(yīng)的關(guān)閉操作,不然就會使資源一直占用而造成資源浪費,從而降低系統(tǒng)性能。

關(guān)于資源的關(guān)閉操作,從JDK7-JDK9有了不少的提升及簡化。

JDK6

在JDK6及之前,每個資源都需要我們手動寫代碼關(guān)閉,如:

FileInputStream fis = null;
byte[] buffer = new byte[1024];
try {
    fis = new FileInputStream(new File("E:Java技術(shù)棧.txt"));
    while (fis.read(buffer) > 0) {
        System.out.println(new String(buffer));
    }
} catch (Exception e) {
    e.printStackTrace();
} finally {
    if (fis != null) {
        try {
            fis.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

資源打開使用完后,必須在finally塊中進行手動關(guān)閉!我們有的同事,做一個查詢功能點,打開了連接查詢完后沒有手動關(guān)閉,最后造成連接池超出最大連接數(shù)而使系統(tǒng)功能堵塞。

JDK7

JDK7發(fā)布后,添加了新特性:try-with-resources語句。所有需要關(guān)閉的資源只要實現(xiàn)了java.lang.AutoCloseable(java.io.Closeable就實現(xiàn)了這個接口)接口就在會程序結(jié)束后自動關(guān)閉。

如上面的讀取文件的流程序用JDK7來寫:

byte[] buffer = new byte[1024];
try (FileInputStream fis = new FileInputStream(new File("E:Java技術(shù)棧.txt"))) {
    while (fis.read(buffer) > 0) {
        System.out.println(new String(buffer));
    }
} catch (Exception e) {
    e.printStackTrace();
}

所有的資源在try()里面定義,并去掉了finally模塊。

下面我們來寫一個自定義的流來看看是否自動關(guān)閉了。

定義一個自定義輸入輸出流

class MyInputStream implements AutoCloseable {

    void read(String content) {
        System.out.println("read content " + content);
    }

    @Override
    public void close() throws Exception {
        System.out.println("input stream is closed.");
    }

}

class MyOutputStream implements AutoCloseable {

    void write(String content) {
        System.out.println("write content " + content);
    }

    @Override
    public void close() throws Exception {
        System.out.println("out stream is closed.");
    }

}

單個資源自動關(guān)閉

try (MyInputStream mis = new MyInputStream()) {
    mis.read("7_2");
} catch (Exception e) {
    e.printStackTrace();
}

輸出:

read content 7_2
input stream is closed.

多個資源自動關(guān)閉

try()里面可以定義多個資源,它們的關(guān)閉順序是最后在try()定義的資源先關(guān)閉。

try (MyInputStream mis = new MyInputStream(); MyOutputStream mos = new MyOutputStream()) {
    mis.read("7_3");
    mos.write("7_3");
} catch (Exception e) {
    e.printStackTrace();
}

輸出:

read content 7_3
write content 7_3
out stream is closed.
input stream is closed.
JDK9

JDK9發(fā)布后,又簡化了try-with-resources語句的用法。

try()里面可以是一個變量,但必須是final的或者等同final才行。如下面的mis,mos定義成局部變量可以不用final,局部變量可以等同于final,但定義成成員變量就必須是用final修飾的,不然會編譯錯誤。

MyInputStream mis = new MyInputStream();
MyOutputStream mos = new MyOutputStream();
try (mis; mos) {
    mis.read("1.9");
    mos.write("1.9");
} catch (Exception e) {
    e.printStackTrace();
}

輸出:

read content 1.9
write content 1.9
out stream is closed.
input stream is closed.

再來看個例子:

Connection dbCon = DriverManager.getConnection("url", "user", "password");
try (dbCon; ResultSet rs = dbCon.createStatement().executeQuery("select * from emp")) {
    while (rs.next()) {
        System.out.println("In loadDataFromDB() =====>>>>>>>>>>>> " + rs.getString(1));
    }
} catch (SQLException e) {
    System.out.println("Exception occurs while reading the data from DB ->" + e.getMessage());
}

dbCon和rs都能被自動關(guān)閉。

JKD9雖然簡化了,但感覺還是沒有什么質(zhì)的變化,實際用途我們可能不希望關(guān)心資源的關(guān)閉,或者在方法結(jié)束之后如果是局部變量它就能自動關(guān)閉?;蛟S是我站的高度不夠,官方有其他的考量,但JDK9的這一點變化還是非常有用的。

更多JDK9的新功能實戰(zhàn)陸續(xù)更新,如果覺得有用,分享到朋友圈給更多的人吧!

推薦:成為架構(gòu)師的十階段學(xué)習(xí)資料

推薦:Spring Boot & Cloud 最強技術(shù)教程

推薦:分享一套高級Java筆試題(實拍高清圖)

如果對你有用,歡迎分享到朋友圈

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

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/71374.html

相關(guān)文章

  • Java核心技術(shù)教程整理,長期更

    以下是Java技術(shù)棧微信公眾號發(fā)布的關(guān)于 Java 的技術(shù)干貨,從以下幾個方面匯總。 Java 基礎(chǔ)篇 Java 集合篇 Java 多線程篇 Java JVM篇 Java 進階篇 Java 新特性篇 Java 工具篇 Java 書籍篇 Java基礎(chǔ)篇 8張圖帶你輕松溫習(xí) Java 知識 Java父類強制轉(zhuǎn)換子類原則 一張圖搞清楚 Java 異常機制 通用唯一標(biāo)識碼UUID的介紹及使用 字符串...

    Anchorer 評論0 收藏0
  • JDK 5 ~ 10 特性傾情整理!

    摘要:最近連都在準(zhǔn)備發(fā)布的路上了,大家都整明白了嗎也許現(xiàn)在大部分人還在用,的新特性都沒用熟,剛出不久,就不用說了。 最近連 JDK11都在準(zhǔn)備發(fā)布的路上了,大家都整明白了嗎?也許現(xiàn)在大部分人還在用6-8,8的新特性都沒用熟,9剛出不久,10-11就不用說了。 為了大家對JDK有一個全面的了解,下面我為大家整理了JDK5~10的所有關(guān)鍵新特性! JDK5新特性 自動裝箱與拆箱 枚舉 靜態(tài)導(dǎo)...

    godiscoder 評論0 收藏0
  • IO字符9jdk7和jdk9的異常的處理

    摘要:的新特性在的后邊可以增加一個在括號中可以定義流對象那么這個流對象的作用域就在中有效中的代碼執(zhí)行完畢會自動把流對象釋放不用寫格式定義流對象定義流對象可能會產(chǎn)出異常的代碼異常類變量變量名異常的處理邏輯創(chuàng)建一個字節(jié)輸入流對象構(gòu)造方法中綁定要讀取的 package com.itheima.demo06.trycatch; import java.io.FileInputStream;impor...

    Hancock_Xu 評論0 收藏0
  • JDK 9 變更一覽

    摘要:概述是一個主要版本的發(fā)布這里介紹的是對的特性和增強的實現(xiàn)是的增強提案,包括增強建議和路線圖流程規(guī)范請求,描述了針對平臺的建議和最終規(guī)范主要變更統(tǒng)一模塊化標(biāo)準(zhǔn)這是全新的編程組件模塊,是可命名的可自描述的代碼和數(shù)據(jù)集合。 概述 java9是一個主要版本的發(fā)布 這里介紹的是Oracle對JDK9的特性和增強的實現(xiàn) JEP是JDK的增強提案,包括增強建議和路線圖流程 JSR(Java規(guī)范請...

    sherlock221 評論0 收藏0
  • JDK9特性,List的listof方法

    摘要:的新特性接口接口接口里邊增加了一個靜態(tài)的方法可以給集合一次性添加多個元素使用前提當(dāng)集合中存儲的元素的個數(shù)已經(jīng)確定了不在改變時使用注意方法只適用于接口接口接口不適用于接接口的實現(xiàn)類方法的返回值是一個不能改變的集合集合不能再使用方法添加元素會拋 package com.itheima.demo04.JDK9; import java.util.List;import java.util.M...

    鄒立鵬 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<