java中帶參數(shù)的try(){}語(yǔ)法含義詳解
帶參數(shù)的try(){}語(yǔ)法含義
帶資源的try語(yǔ)句(try-with-resource)
最簡(jiǎn)形式為
try(Resource res = xxx)//可指定多個(gè)資源 { ? ? ?work with res }
try塊退出時(shí),會(huì)自動(dòng)調(diào)用res.close()方法,關(guān)閉資源。
PS:在coreJava第9版的第一卷的486頁(yè)有解釋。
挺好用的語(yǔ)法,不用寫一大堆finally來(lái)關(guān)閉資源,所有實(shí)現(xiàn)Closeable的類聲明都可以寫在里面,最常見(jiàn)于流操作,socket操作,新版的httpclient也可以;
需要注意的是
try()的括號(hào)中可以寫多行聲明,每個(gè)聲明的變量類型都必須是Closeable的子類,用分號(hào)隔開。樓上說(shuō)不能關(guān)兩個(gè)流的落伍了
補(bǔ)充一下:在沒(méi)有這個(gè)語(yǔ)法之前,流操作一般是這樣寫的:
InputStream is = null; OutputStream os = null; try { ?? ?//... } catch (IOException e) { ?? ?//... }finally{ ?? ?try { ?? ??? ?if(os!=null){ ?? ??? ??? ?os.close(); ?? ??? ?} ?? ??? ?if(is!=null){ ?? ??? ??? ?is.close(); ?? ??? ?} ?? ?} catch (IOException e2) { ?? ??? ?//... ?? ?} }?? ?
而現(xiàn)在你可以這樣寫:
try( ?? ?InputStream is = new FileInputStream("..."); ?? ?OutputStream os = new FileOutputStream("..."); ){ ?? ?//... }catch (IOException e) { ?? ?//... }
生活一下就美好了
對(duì)try(){}的簡(jiǎn)單理解
以前使用try catch-finally都是捕獲異常,然后流關(guān)閉等等,代碼總是這樣的:
好比往FileOutputStream寫東西
@Test public void test2() throws IOException { File file = new File("E://test"); if (!file.exists()) { file.createNewFile(); } FileOutputStream fileOutputStream = new FileOutputStream(file); try { System.out.println("do something..."); fileOutputStream.write("aaa".getBytes()); fileOutputStream.flush(); } catch (Exception e) { System.out.println("do ..."); } finally { fileOutputStream.close(); } }
這樣寫很難受,可以進(jìn)行優(yōu)化
將FileOutputStream fileOutputStream = new FileOutputStream(file)放到try()里面,也可以放多個(gè)
@Test public void test2() throws IOException { File file = new File("E://test"); if (!file.exists()) { file.createNewFile(); } try( FileOutputStream fileOutputStream = new FileOutputStream(file);) { System.out.println("do something..."); fileOutputStream.write("aaa".getBytes()); fileOutputStream.flush(); } catch (Exception e) { System.out.println("do ..."); } }
try()里每個(gè)聲明的變量類型都必須是Closeable的子類,就一個(gè)close方法
相當(dāng)于系統(tǒng)自動(dòng)將關(guān)閉操作放到了finally里面而不需要我們自己寫了,很nice
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實(shí)現(xiàn)數(shù)據(jù)連接池Druid舉例
本文主要介紹了Java實(shí)現(xiàn)數(shù)據(jù)連接池Druid舉例,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03Java 帶參數(shù)與帶返回值的方法的定義和調(diào)用
在java中,方法就是用來(lái)完成解決某件事情或?qū)崿F(xiàn)某個(gè)功能的辦法。方法實(shí)現(xiàn)的過(guò)程中,會(huì)包含很多條語(yǔ)句用于完成某些有意義的功能——通常是處理文本,控制輸入或計(jì)算數(shù)值,這篇文章我們來(lái)探究一下帶參數(shù)與帶返回值的方法的定義和調(diào)用2022-04-04Java 重寫時(shí)應(yīng)當(dāng)遵守的 11 條規(guī)則
這篇文章主要介紹了Java 重寫時(shí)應(yīng)當(dāng)遵守的 11 條規(guī)則,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03springBoot service層事務(wù)控制的操作
這篇文章主要介紹了springBoot service層事務(wù)控制的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-02-02Java(JDK/Tomcat/Maven)運(yùn)行環(huán)境配置及工具(idea/eclipse)安裝詳細(xì)教程
這篇文章主要介紹了Java(JDK/Tomcat/Maven)運(yùn)行環(huán)境配置及工具(idea/eclipse)安裝,本文給大家介紹的非常想詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03基于Java回顧之網(wǎng)絡(luò)通信的應(yīng)用分析
在這篇文章里,我們主要討論如何使用Java實(shí)現(xiàn)網(wǎng)絡(luò)通信,包括TCP通信、UDP通信、多播以及NIO2013-05-05Android 單例模式 Singleton 簡(jiǎn)單實(shí)例設(shè)計(jì)模式解析
這篇文章主要介紹了單例模式 Singleton 簡(jiǎn)單實(shí)例設(shè)計(jì)模式解析的相關(guān)資料,需要的朋友可以參考下2016-12-12解決mybatis 執(zhí)行mapper的方法時(shí)報(bào)空指針問(wèn)題
這篇文章主要介紹了解決mybatis 執(zhí)行mapper的方法時(shí)報(bào)空指針問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07