欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用try-with-resource機(jī)制關(guān)閉連接

 更新時(shí)間:2021年07月31日 15:27:16   作者:滴哩哩哩滴哩哩哩噠噠  
這篇文章主要介紹了使用try-with-resource機(jī)制關(guān)閉連接的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

使用try-with-resource機(jī)制關(guān)閉連接

JAVA的一大特性就是JVM會(huì)對(duì)內(nèi)部資源實(shí)現(xiàn)自動(dòng)回收

即自動(dòng)GC,給開發(fā)者帶來(lái)了極大的便利。但是JVM對(duì)外部資源的引用卻無(wú)法自動(dòng)回收,例如數(shù)據(jù)庫(kù)連接,網(wǎng)絡(luò)連接以及輸入輸出IO流等,這些連接就需要我們手動(dòng)去關(guān)閉,不然會(huì)導(dǎo)致外部資源泄露,連接池溢出以及文件被異常占用等。

傳統(tǒng)的手動(dòng)釋放外部資源一般放在

try{}catch(){}finally{}機(jī)制的finally代碼塊中,因?yàn)閒inally代碼塊中語(yǔ)句是肯定會(huì)被執(zhí)行的,即保證了外部資源最后一定會(huì)被釋放。同時(shí)考慮到finally代碼塊中也有可能出現(xiàn)異常,finally代碼塊中也有一個(gè)try{}catch(){},這種寫法是經(jīng)典的傳統(tǒng)釋放外部資源方法,顯然是非常繁瑣的。

JDK1.7之后有了try-with-resource處理機(jī)制

首先被自動(dòng)關(guān)閉的資源需要實(shí)現(xiàn)Closeable或者AutoCloseable接口,因?yàn)橹挥袑?shí)現(xiàn)了這兩個(gè)接口才可以自動(dòng)調(diào)用close()方法去自動(dòng)關(guān)閉資源。寫法為try(){}catch(){},將要關(guān)閉的外部資源在try()中創(chuàng)建,catch()捕獲處理異常。

其實(shí)try-with-resource機(jī)制是一種語(yǔ)法糖,其底層實(shí)現(xiàn)原理仍然是try{}catch(){}finally{}寫法,不過(guò)在catch(){}代碼塊中有一個(gè)addSuppressed()方法,即異常抑制方法。

如果業(yè)務(wù)處理和關(guān)閉連接都出現(xiàn)了異常,業(yè)務(wù)處理的異常會(huì)抑制關(guān)閉連接的異常,只拋出處理中的異常,仍然可以通過(guò)getSuppressed()方法獲得關(guān)閉連接的異常。

和傳統(tǒng)的try{}catch(){}finally{}機(jī)制相比,try-with-resource處理機(jī)制有了這個(gè)異常抑制方法就是幫助我們簡(jiǎn)化了關(guān)閉連接時(shí)出現(xiàn)異常的處理。

try-with-resource使用時(shí)遇到的問題

java 1.7之后 增加了 try-wit-resource的語(yǔ)法糖

大概的用法就是在try中聲明一個(gè)或者多個(gè)的流,會(huì)在try塊代碼執(zhí)行完成后自動(dòng)關(guān)閉流,不用再寫finally進(jìn)行手都關(guān)閉。

try (InputStream is1 = ...;
     InputStream is2 = ...;) {
    //do something
} catch{
}

于是我就在項(xiàng)目中想改成這種寫法,但是在改的過(guò)程中遇到了一些問題。我的代碼中需要對(duì)聲明過(guò)后的流再賦值,但是用這樣的寫法一直會(huì)報(bào)錯(cuò)

代碼大概是這樣的:

此時(shí)會(huì)編譯出錯(cuò):

The resource is1 of a try-with-resources statement cannot be assigned;

報(bào)錯(cuò)的原因是:

try-with-source中聲明的變量無(wú)法被更改。但是我很奇怪這是為什么,上網(wǎng)搜了沒有搜到,于是去找了一下官方文檔。官方文檔中有一段這樣的描述:

It is a compile-time error if final appears more than once as a modifier for each variable declared in a resource specification. A variable declared in a resource specification is implicitly declared final (§4.12.4) if it is not explicitly declared final.

意思就是,try-with-resource中聲明的變量會(huì)隱式的加上final 關(guān)鍵字,所以無(wú)法再進(jìn)行賦值。但是至于為什么這么設(shè)計(jì),我暫時(shí)沒找到答案。

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Spring中Bean的生命周期實(shí)例講解

    Spring中Bean的生命周期實(shí)例講解

    這篇文章主要介紹了Spring中Bean的生命周期講解,而Spring中的一個(gè)Bean從開始到結(jié)束經(jīng)歷很多過(guò)程,但總體可以分為六個(gè)階段Bean定義、實(shí)例化、屬性賦值、初始化、生存期、銷毀,需要的朋友可以參考下
    2023-08-08
  • javaweb實(shí)現(xiàn)文件上傳與下載功能

    javaweb實(shí)現(xiàn)文件上傳與下載功能

    這篇文章主要為大家詳細(xì)介紹了javaweb實(shí)現(xiàn)文件上傳與下載功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 在springboot中注入FilterRegistrationBean不生效的原因

    在springboot中注入FilterRegistrationBean不生效的原因

    這篇文章主要介紹了在springboot中注入FilterRegistrationBean不生效的原因及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 解析JDK14中的java tools簡(jiǎn)介

    解析JDK14中的java tools簡(jiǎn)介

    這篇文章主要介紹了JDK14中的java tools簡(jiǎn)介,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Java去除字符串中空格的方法詳解

    Java去除字符串中空格的方法詳解

    這篇文章主要介紹了Java去除字符串中空格的方法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • RestTemplate如何通過(guò)HTTP?Basic?Auth認(rèn)證示例說(shuō)明

    RestTemplate如何通過(guò)HTTP?Basic?Auth認(rèn)證示例說(shuō)明

    這篇文章主要為大家介紹了RestTemplate如何通過(guò)HTTP?Basic?Auth認(rèn)證的示例說(shuō)明,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • redis?redisTemplate數(shù)據(jù)類型基礎(chǔ)操作

    redis?redisTemplate數(shù)據(jù)類型基礎(chǔ)操作

    這篇文章主要介紹了redis?redisTemplate數(shù)據(jù)類型基礎(chǔ)操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • ApplicationListenerDetector監(jiān)聽器判斷demo

    ApplicationListenerDetector監(jiān)聽器判斷demo

    這篇文章主要為大家介紹了ApplicationListenerDetector監(jiān)聽器判斷demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • 應(yīng)用Java泛型和反射導(dǎo)出CSV文件的方法

    應(yīng)用Java泛型和反射導(dǎo)出CSV文件的方法

    這篇文章主要介紹了應(yīng)用Java泛型和反射導(dǎo)出CSV文件的方法,通過(guò)一個(gè)自定義函數(shù)結(jié)合泛型與反射的應(yīng)用實(shí)現(xiàn)導(dǎo)出CSV文件的功能,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2014-12-12
  • Hibernate映射文件id的generator配置方法

    Hibernate映射文件id的generator配置方法

    下面小編就為大家分享一篇Hibernate映射文件id的generator配置方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12

最新評(píng)論