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

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

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

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

JAVA的一大特性就是JVM會對內(nèi)部資源實現(xiàn)自動回收

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

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

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

JDK1.7之后有了try-with-resource處理機制

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

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

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

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

try-with-resource使用時遇到的問題

java 1.7之后 增加了 try-wit-resource的語法糖

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

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

于是我就在項目中想改成這種寫法,但是在改的過程中遇到了一些問題。我的代碼中需要對聲明過后的流再賦值,但是用這樣的寫法一直會報錯

代碼大概是這樣的:

此時會編譯出錯:

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

報錯的原因是:

try-with-source中聲明的變量無法被更改。但是我很奇怪這是為什么,上網(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中聲明的變量會隱式的加上final 關(guān)鍵字,所以無法再進行賦值。但是至于為什么這么設(shè)計,我暫時沒找到答案。

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

相關(guān)文章

  • java環(huán)境配好后jar文件打開命令框閃退(無打開方式,無反應(yīng))解決辦法

    java環(huán)境配好后jar文件打開命令框閃退(無打開方式,無反應(yīng))解決辦法

    在Java開發(fā)中我們經(jīng)常會遇到運行Jar包時閃退的問題,下面這篇文章主要給大家介紹了關(guān)于java環(huán)境配好后jar文件打開命令框閃退(無打開方式,無反應(yīng))的解決辦法,文中通過圖文介紹的非常詳細,需要的朋友可以參考下
    2024-04-04
  • Spring?Boot與Redis的緩存一致性問題解決

    Spring?Boot與Redis的緩存一致性問題解決

    在使用緩存時,緩存一致性問題是一個常見的挑戰(zhàn),本文主要介紹了Spring?Boot與Redis的緩存一致性問題,具有一定的參考價值,感興趣的可以了解一下
    2024-07-07
  • Spring Data Jpa實現(xiàn)分頁和排序代碼實例

    Spring Data Jpa實現(xiàn)分頁和排序代碼實例

    本篇文章主要介紹了Spring Data Jpa實現(xiàn)分頁和排序代碼實例,具有一定的參考價值,有興趣的可以了解一下。
    2017-03-03
  • Java中遍歷Map集合的5種方式總結(jié)

    Java中遍歷Map集合的5種方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java中遍歷Map集合的5種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • WIN10環(huán)境 Maven的安裝與配置詳細教程

    WIN10環(huán)境 Maven的安裝與配置詳細教程

    這篇文章主要介紹了WIN10環(huán)境 Maven的安裝與配置詳細教程,本文分步驟給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • spring中實現(xiàn)容器加載完成后再執(zhí)行自己的方法

    spring中實現(xiàn)容器加載完成后再執(zhí)行自己的方法

    這篇文章主要介紹了spring中實現(xiàn)容器加載完成后再執(zhí)行自己的方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • java實現(xiàn)大文件導出的實現(xiàn)與優(yōu)化

    java實現(xiàn)大文件導出的實現(xiàn)與優(yōu)化

    這篇文章主要為大家詳細介紹了java實現(xiàn)大文件導出的實現(xiàn)與優(yōu)化的相關(guān)資料,文中的示例代碼講解詳細,對我們深入了解java有一定的幫助,感興趣的小伙伴可以了解下
    2023-11-11
  • Java如何獲取主機的基本信息詳解

    Java如何獲取主機的基本信息詳解

    最近遇到一個工作需求,上網(wǎng)查了一下怎樣在Java中獲取本機的ip和主機名,所以下面這篇文章主要給大家介紹了關(guān)于Java如何獲取主機的基本信息,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-12-12
  • Java拼接字符串時如何去掉最后一個多余的逗號

    Java拼接字符串時如何去掉最后一個多余的逗號

    當我們遍歷拼接字符串的時候,最后會多出一個我們添加的字符(比如逗號),下面通過實例代碼給大家介紹Java拼接字符串時去掉最后一個多余的逗號,感興趣的朋友跟隨小編一起看看吧
    2024-12-12
  • Java時間輪算法的實現(xiàn)代碼示例

    Java時間輪算法的實現(xiàn)代碼示例

    本篇文章主要介紹了Java時間輪算法的實現(xiàn)代碼示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08

最新評論

汾阳市| 巴林右旗| 时尚| 新和县| 昌平区| 武安市| 常州市| 昌图县| 铜山县| 榆社县| 精河县| 加查县| 吴旗县| 永兴县| 长岭县| 崇信县| 罗甸县| 太湖县| 长春市| 大理市| 瑞丽市| 吉首市| 乾安县| 高雄市| 凤庆县| 内江市| 洮南市| 射洪县| 金湖县| 壤塘县| 南通市| 蒲城县| 砀山县| 楚雄市| 云和县| 印江| 荥阳市| 绥芬河市| 海宁市| 平泉县| 苏州市|