溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

java9版本增強了哪些語法

發(fā)布時間:2022-03-15 14:43:52 來源:億速云 閱讀:203 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“java9版本增強了哪些語法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學(xué)習(xí)“java9版本增強了哪些語法”吧!

一、先說Java7的try-with-resources

在Java 7之前沒有try-with-resources語法,所有的流的銷毀動作,全都需要自己在finally方法中手動的寫代碼進行關(guān)閉。如下文中的代碼,將一個字符串寫入到一個文件里面。

@Testvoid 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流的關(guān)閉");    bw.flush();  }finally{    bw.close();   //手動關(guān)閉IO管道流    osw.close();    fos.close();  }}

從Java 7版本開始提供了try-with-resources語法,我們只需要把管道流用try()包含起來,在try代碼段執(zhí)行完成之后,IO管道流就會自動的關(guān)閉,不需要我們手寫代碼去關(guān)閉,這很簡潔!

@Testvoid 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語法,進行自動的資源關(guān)閉誤區(qū)二:所有帶有close()方法的類對象,都會自動的調(diào)用close()方法進行資源關(guān)閉

誤區(qū)一把實踐范圍縮小了,而誤區(qū)二把實踐范圍夸大了。那么什么樣的資源可以被自動關(guān)閉呢?答案就是實現(xiàn)了AutoCloseable或Closeable接口的類可以自動的進行資源關(guān)閉。

public interface Closeable extends AutoCloseable {    public void close() throws IOException;}

Closeable接口繼承自AutoCloseable接口,二者都包含close()方法。如果你自定義的占用系統(tǒng)資源的類需要進行資源回收,請實現(xiàn)這兩個接口之一,并在close()方法中進行資源回收與關(guān)閉。這樣你自定義的類,也可以使用try-with-resources語法進行資源回收與關(guān)閉。

三、try-with-resources在Java 9中的改進

try-with-resources語法在java 9 中進行了改進,try-with-resources語法的try()可以包含變量,多個變量用分號隔開。 這樣的改進目的是讓語義更加明確,將資源創(chuàng)建代碼與嘗試資源回收的語法分離。

語義一:嘗試去執(zhí)行代碼段,如果拋出異常,對異常進行處理語義二:嘗試去自動關(guān)閉資源,關(guān)閉誰?關(guān)閉被try()包含的變量
@Testvoid 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){  //注意這里:嘗試去回收這三個對象對應(yīng)的資源,和上文中的java 7代碼對比    bw.write("Java9-可以被自動調(diào)用close()方法");    bw.flush();  }}

到此,相信大家對“java9版本增強了哪些語法”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI