[優美的Java代碼之try...catch] 概述 通常我們使用try...catch()捕獲異常時,如果遇到類似IO流的處理,要在finally部分關閉IO流。這是JDK1.7之前的寫法了; 在JDK7以後,可以使用優化後的try-with-resource語句,該語句確保了每個資源,在語句結束 ...
[優美的Java代碼之try...catch]
目錄概述
通常我們使用try...catch()捕獲異常時,如果遇到類似IO流的處理,要在finally部分關閉IO流。這是JDK1.7之前的寫法了;
在JDK7以後,可以使用優化後的try-with-resource
語句,該語句確保了每個資源,在語句結束時關閉。所謂的資源是指在程式完成後,必須關閉的流對象。寫在()裡面的流對象對應的類都實現了自動關閉介面AutoCloseable。
優化
語法:
try (創建流對象語句,如果多個,使用';'隔開) {
// 讀寫數據
} catch (IOException e) {
e.printStackTrace();
}
優化前寫法(JDK1.7之前)
Properties prop = new Properties();
File configFile = new File("/home/appconfig.properties");
FileInputStream fs = null;
InputStreamReader reader = null;
try {
fs = new FileInputStream(configFile);
reader = new InputStreamReader(fs, "utf-8");
prop.load(reader);
} catch (Exception e) {
Logger.error("load file error!!", e);
} finally {
try {
if (reader != null) {
reader.close();
}
if (fs != null) {
fs.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
優化後寫法(JDK1.7及以後)
try (FileInputStream fs = new FileInputStream(configFile); InputStreamReader reader = new InputStreamReader(fs, "utf-8")) {
prop.load(reader);
} catch (Exception e) {
Logger.error("load file error!!", e);
}
延伸閱讀:嵌套的文件流如何正確的關閉
-
嵌套打開的流只需關閉最後打開的流,先打開的會自動關閉;
-
打開的流可以多次關閉不會出錯;
-
後面嘗試打開流時可能會發生異常,此時要考慮關閉前面已經打開的流。