java9版本特性資源自動關閉的語法增強
我計劃在后續(xù)的一段時間內(nèi),寫一系列關于java 9的文章,雖然java 9 不像Java 8或者Java 11那樣的核心java版本,但是還是有很多的特性值得關注。期待您能關注我,我將把java 9 寫成一系列的文章,大概十篇左右。
在Java 9的版本中,對從JDK 7開始支持的try-with-resources語法進行了改進。雖然只是一個小小的改進,我仍希望把他介紹給你,我們一起來每天進步一點點。
一、先說Java7的try-with-resources(Java9改進版在后文)
在Java 7之前沒有try-with-resources
語法,所有的流的銷毀動作,全都需要自己在finally方法中手動的寫代碼進行關閉。如下文中的代碼,將一個字符串寫入到一個文件里面。
@Test void testStream() throws IOException { String fileName = "D:\\data\\test\\testStream.txt"; FileOutputStream fos = new FileOutputStream(fileName); //創(chuàng)建IO管道流 OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(osw); try{ bw.write("手寫代碼進行Stream流的關閉"); bw.flush(); }finally{ bw.close(); //手動關閉IO管道流 osw.close(); fos.close(); } }
從Java 7版本開始提供了try-with-resources
語法,我們只需要把管道流用try()
包含起來,在try代碼段執(zhí)行完成之后,IO管道流就會自動的關閉,不需要我們手寫代碼去關閉,這很簡潔!
@Test void testTry() throws IOException { String fileName = "D:\\data\\test\\testTry.txt"; try(FileOutputStream fos = new FileOutputStream(fileName); OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(osw);){ bw.write("IO管道流被自動調(diào)用close()方法"); bw.flush(); } }
二、避免走入誤區(qū)
很多小伙伴在知道try-with-resources
語法之后,容易陷入誤區(qū)
誤區(qū)一:只有IO管道流才能使用try-with-resources
語法,進行自動的資源關閉
誤區(qū)二:所有帶有close()方法的類對象,都會自動的調(diào)用close()方法進行資源關閉
誤區(qū)一把實踐范圍縮小了,而誤區(qū)二把實踐范圍夸大了。那么什么樣的資源可以被自動關閉呢?答案就是實現(xiàn)了AutoCloseable或Closeable接口的類可以自動的進行資源關閉。
public interface Closeable extends AutoCloseable { public void close() throws IOException; }
Closeable接口繼承自AutoCloseable接口,二者都包含close()方法。如果你自定義的占用系統(tǒng)資源的類需要進行資源回收,請實現(xiàn)這兩個接口之一,并在close()方法中進行資源回收與關閉。這樣你自定義的類,也可以使用try-with-resources
語法進行資源回收與關閉。
三、try-with-resources在Java 9中的改進
try-with-resources
語法在java 9 中進行了改進,try-with-resources
語法的try()
可以包含變量,多個變量用分號隔開。 這樣的改進目的是讓語義更加明確,將資源創(chuàng)建代碼與嘗試資源回收的語法分離。
語義一:嘗試去執(zhí)行代碼段,如果拋出異常,對異常進行處理
語義二:嘗試去自動關閉資源,關閉誰?關閉被try()
包含的變量
@Test void testJava9Try() throws IOException { String fileName = "D:\\data\\test\\testJava9Try.txt"; FileOutputStream fos = new FileOutputStream(fileName); OutputStreamWriter osw = new OutputStreamWriter(fos); BufferedWriter bw = new BufferedWriter(osw); try(bw;osw;fos){ //注意這里:嘗試去回收這三個對象對應的資源,和上文中的java 7代碼對比 bw.write("Java9-可以被自動調(diào)用close()方法"); bw.flush(); } }
以上就是java9版本特性資源自動關閉的語法增強的詳細內(nèi)容,更多關于java9資源自動關閉的語法增強的資料請關注腳本之家其它相關文章!
相關文章
SpringMVC + jquery.uploadify實現(xiàn)上傳文件功能
文件上傳是很多項目都會使用到的功能,SpringMVC當然也提供了這個功能。不過小編不建議在項目中通過form表單來提交文件上傳,這樣做的局限性很大。下面這篇文章主要介紹了利用SpringMVC + jquery.uploadify實現(xiàn)上傳文件功能的相關資料,需要的朋友可以參考下。2017-06-06springboot jpaRepository為何一定要對Entity序列化
這篇文章主要介紹了springboot jpaRepository為何一定要對Entity序列化,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12springmvc fastjson 反序列化時間格式化方法(推薦)
下面小編就為大家?guī)硪黄猻pringmvc fastjson 反序列化時間格式化方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04SpringBoot配置默認HikariCP數(shù)據(jù)源
咱們開發(fā)項目的過程中用到很多的開源數(shù)據(jù)庫鏈接池,比如druid、c3p0、BoneCP等等,本文主要介紹了SpringBoot配置默認HikariCP數(shù)據(jù)源,具有一定的參考價值,感興趣的可以了解一下2023-11-11