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方法
相當(dāng)于系統(tǒng)自動將關(guān)閉操作放到了finally里面而不需要我們自己寫了,很nice

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決Spring或SpringBoot開啟事務(wù)以后無法返回自增主鍵的問題
這篇文章主要介紹了解決Spring或SpringBoot開啟事務(wù)以后無法返回自增主鍵的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07
Java報NoClassDefFoundError異常的原因及解決
在 Java 開發(fā)過程中, java.lang.NoClassDefFoundError 是一個令人頭疼的運行時錯誤,本文將深入探討這一問題的原因和常見場景,并提供實用的解決方法,希望對大家有所幫助2025-03-03
java + dom4j.jar提取xml文檔內(nèi)容
這篇文章主要為大家詳細(xì)介紹了java + dom4j.jar提取xml文檔內(nèi)容,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-08-08
詳細(xì)說明關(guān)于Java的數(shù)據(jù)庫連接(JDBC)
這篇文章主要介紹了詳細(xì)說明關(guān)于Java的數(shù)據(jù)庫連接JDBC,JDBC是用Java語言向數(shù)據(jù)庫發(fā)送SQL語句,需要的朋友可以參考下面文章內(nèi)容2021-09-09

