天天看點

Java程式中如何正确的釋放資源(備戰2022春招或暑期實習,每天進步一點點,打卡100天,Day2)

 備戰2022春招或暑期實習,祝大家每天進步億點點!Day2

本篇總結的是 《Java程式中如何正确的釋放資源》,後續會每日更新~

關于《Redis入門到精通》、《并發程式設計》等知識點可以參考我的往期部落格:《Redis從入門到精通》系列 《并發程式設計》系列

相信自己,越活越堅強,活着就該逢山開路,遇水架橋!生活,你給我壓力,我還你奇迹!

Java程式中如何正确的釋放資源(備戰2022春招或暑期實習,每天進步一點點,打卡100天,Day2)

正文

我們先來看一段代碼,大家看看自己有沒有中招,順帶認真分析一下這段代碼有什麼問題!

1./**
  * 讀取指定路徑檔案第一行資料内容
  *
  * @param path 檔案路徑
  * @return
  */
public static String readFirstLine(String path){
 
    BufferedReader br = null;
    String line = null;
    try {
        br = new BufferedReader(new FileReader(path));
        line = br.readLine();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (br != null) {
            try {
                br.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return line;
}      

這段代碼實作了一個非常簡單的功能,但是為了正确的處理異常,釋放資源,導緻代碼編寫得十分臃腫,可讀性非常的差!

那我們應該如何優化代碼呢? 最好的辦法就是采用Java 7引入的try-with-resources語句來解決,當然能使用try-with-resource的資源類,必須實作了AutoCloseable接口,比如我們Demo中的BufferedReader類,它的類關系圖如下所示:

Java程式中如何正确的釋放資源(備戰2022春招或暑期實習,每天進步一點點,打卡100天,Day2)

可以看到優化後的代碼變得非常清晰,而且不需要手動寫代碼去釋放資源,這樣我們就不需要擔心資源的關閉問題了!

讀到這裡有些小夥伴肯定會想,我就是不用try-with-resources,我覺得自己釋放才靠譜。這……我隻能說你赢了,那有沒有一種稍微優雅一點的方式來釋放資源呢?

Java程式中如何正确的釋放資源(備戰2022春招或暑期實習,每天進步一點點,打卡100天,Day2)