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

如何在JDK 9中更簡潔使用 try-with-resources 語句

 更新時間:2019年06月13日 11:26:44   作者:Way Lau  
本文詳細(xì)介紹了自 JDK 7 引入的 try-with-resources 語句的原理和用法,以及介紹了 JDK 9 對 try-with-resources 的改進(jìn),使得用戶可以更加方便、簡潔的使用 try-with-resources 語句。,需要的朋友可以參考下

在 JDK 7 之前,資源需要手動關(guān)閉

例如下面一個很常見的文件操作的例子:

Charset charset = Charset.forName("US-ASCII");
String s = ...;
BufferedWriter writer = null;
try {
writer = Files.newBufferedWriter(file, charset);
writer.write(s, 0, s.length());
} catch (IOException x) {
System.err.format("IOException: %s%n", x);
} finally {
if (writer != null) writer.close();
}

在 JDK 7 之前,你一定要牢記在 finally 中執(zhí)行 close 以釋放資源

JDK 7 中的 try-with-resources 介紹

try-with-resources 是 JDK 7 中一個新的異常處理機(jī)制,它能夠很容易地關(guān)閉在 try-catch 語句塊中使用的資源。所謂的資源(resource)是指在程序完成后,必須關(guān)閉的對象。try-with-resources 語句確保了每個資源在語句結(jié)束時關(guān)閉。所有實現(xiàn)了 java.lang.AutoCloseable 接口(其中,它包括實現(xiàn)了 java.io.Closeable 的所有對象),可以使用作為資源。

例如,我們自定義一個資源類

public class Demo { 
public static void main(String[] args) {
try(Resource res = new Resource()) {
res.doSome();
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
class Resource implements AutoCloseable {
void doSome() {
System.out.println("do something");
}
@Override
public void close() throws Exception {
System.out.println("resource is closed");
}
}

執(zhí)行輸出如下:

do something
resource is closed

可以看到,資源終止被自動關(guān)閉了。

再來看一個例子,是同時關(guān)閉多個資源的情況:

public class Main2 { 
public static void main(String[] args) {
try(ResourceSome some = new ResourceSome();
ResourceOther other = new ResourceOther()) {
some.doSome();
other.doOther();
} catch(Exception ex) {
ex.printStackTrace();
}
}
}
class ResourceSome implements AutoCloseable {
void doSome() {
System.out.println("do something");
}
@Override
public void close() throws Exception {
System.out.println("some resource is closed");
}
}
class ResourceOther implements AutoCloseable {
void doOther() {
System.out.println("do other things");
}
@Override
public void close() throws Exception {
System.out.println("other resource is closed");
}
}

最終輸出為:

do something
do other things
other resource is closed
some resource is closed

在 try 語句中越是最后使用的資源,越是最早被關(guān)閉。

try-with-resources 在 JDK 9 中的改進(jìn)

作為 Milling Project Coin 的一部分, try-with-resources 聲明在 JDK 9 已得到改進(jìn)。如果你已經(jīng)有一個資源是 final 或等效于 final 變量,您可以在 try-with-resources 語句中使用該變量,而無需在 try-with-resources 語句中聲明一個新變量。

例如,給定資源的聲明

// A final resource
final Resource resource1 = new Resource("resource1");
// An effectively final resource
Resource resource2 = new Resource("resource2");

老方法編寫代碼來管理這些資源是類似的:

// Original try-with-resources statement from JDK 7 or 8
try (Resource r1 = resource1;
Resource r2 = resource2) {
// Use of resource1 and resource 2 through r1 and r2.
}

而新方法可以是

// New and improved try-with-resources statement in JDK 9
try (resource1;
resource2) {
// Use of resource1 and resource 2.
}

看上去簡潔很多吧。對 Java 未來的發(fā)展信心滿滿。

愿意嘗試 JDK 9 這種新語言特性的可以下載使用 JDK 9 快照。Enjoy!

源碼

本章例子的源碼,可以在 https://github.com/waylau/essential-java 中 com.waylau.essentialjava.exception.trywithresources 包下找到。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java 并行數(shù)據(jù)處理和性能分析

    Java 并行數(shù)據(jù)處理和性能分析

    這篇文章主要介紹了Java 并行數(shù)據(jù)處理和性能分析,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • RabbitMQ進(jìn)階之消息可靠性詳解

    RabbitMQ進(jìn)階之消息可靠性詳解

    這篇文章主要介紹了RabbitMQ進(jìn)階之消息可靠性詳解,abbitmq消息的投遞過程中,怎么確保消息能不丟失,這是一個很重要的問題,哪怕我們做了Rabbitmq持久化,也不能保證我們的業(yè)務(wù)消息不會被丟失,需要的朋友可以參考下
    2023-08-08
  • Jdbctemplate多數(shù)據(jù)源配置方法詳解

    Jdbctemplate多數(shù)據(jù)源配置方法詳解

    這篇文章主要介紹了Jdbctemplate多數(shù)據(jù)源配置方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-06-06
  • java中-jar 與nohup的對比

    java中-jar 與nohup的對比

    這篇文章主要介紹了java中 -jar 與nohup的對比的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • Spring Cloud 系列之服務(wù)調(diào)用 OpenFeign的實現(xiàn)

    Spring Cloud 系列之服務(wù)調(diào)用 OpenFeign的實現(xiàn)

    這篇文章主要介紹了Spring Cloud 系列之服務(wù)調(diào)用 OpenFeign的實現(xiàn),需要的朋友可以參考下
    2020-11-11
  • 應(yīng)用啟動數(shù)據(jù)初始化接口CommandLineRunner和Application詳解

    應(yīng)用啟動數(shù)據(jù)初始化接口CommandLineRunner和Application詳解

    這篇文章主要介紹了應(yīng)用啟動數(shù)據(jù)初始化接口CommandLineRunner和Application詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Eclipse?2022?設(shè)置中文漢化的超詳細(xì)圖文教程

    Eclipse?2022?設(shè)置中文漢化的超詳細(xì)圖文教程

    這篇文章主要介紹了Eclipse?2022?設(shè)置中文漢化的超詳細(xì)圖文教程,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • SpringBoot application.yml和bootstrap.yml的區(qū)別

    SpringBoot application.yml和bootstrap.yml的區(qū)別

    本文主要介紹了SpringBoot application.yml和bootstrap.yml的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • Java創(chuàng)建型模式之建造者模式詳解

    Java創(chuàng)建型模式之建造者模式詳解

    建造者模式,是一種對象構(gòu)建模式 它可以將復(fù)雜對象的建造過程抽象出來,使這個抽象過程的不同實現(xiàn)方法可以構(gòu)造出不同表現(xiàn)的對象。本文將通過示例講解建造者模式,需要的可以參考一下
    2023-02-02
  • Java基礎(chǔ)第二篇方法與數(shù)據(jù)成員

    Java基礎(chǔ)第二篇方法與數(shù)據(jù)成員

    在上一篇文章中介紹了Java基礎(chǔ) 從HelloWorld到面向?qū)ο?,我們初步了解了對?object)。對象中的數(shù)據(jù)成員表示對象的狀態(tài)。對象可以執(zhí)行方法,表示特定的動作。這篇文章我們進(jìn)一步深入到對象。了解Java中方法與數(shù)據(jù)成員的一些細(xì)節(jié)。
    2021-09-09

最新評論

贵州省| 德钦县| 阿克陶县| 扬中市| 临澧县| 伊通| 高唐县| 栾城县| 濮阳市| 北票市| 汝州市| 乐昌市| 赤城县| 赫章县| 商河县| 涿州市| 饶河县| 凉山| 阜宁县| 东明县| 长沙市| 行唐县| 萨迦县| 集贤县| 新竹县| 车险| 中卫市| 蓬安县| 岫岩| 巴南区| 杭州市| 中牟县| 德阳市| 堆龙德庆县| 景德镇市| 文安县| 东海县| 九江县| 遂平县| 湘潭市| 齐河县|