備戰2022春招或暑期實習,祝大家每天進步億點點!Day2
本篇總結的是 《Java程式中如何正确的釋放資源》,後續會每日更新~
關于《Redis入門到精通》、《并發程式設計》等知識點可以參考我的往期部落格:《Redis從入門到精通》系列 《并發程式設計》系列
相信自己,越活越堅強,活着就該逢山開路,遇水架橋!生活,你給我壓力,我還你奇迹!

正文
我們先來看一段代碼,大家看看自己有沒有中招,順帶認真分析一下這段代碼有什麼問題!
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類,它的類關系圖如下所示:
可以看到優化後的代碼變得非常清晰,而且不需要手動寫代碼去釋放資源,這樣我們就不需要擔心資源的關閉問題了!
讀到這裡有些小夥伴肯定會想,我就是不用try-with-resources,我覺得自己釋放才靠譜。這……我隻能說你赢了,那有沒有一種稍微優雅一點的方式來釋放資源呢?