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