在Java7以前,針對需要特別close的資源,會寫程式的人基本上都會放在finally的block中:
private void close(Closeable closable){ try { if( closable != null ) closable.close(); } catch (IOException e) { // log } } private void load(){ mProp = new Properties(); InputStream is = null; try { is = new FileInputStream(mConfigFilePath); mProp.load(is ); } catch (IOException e) { // need to handle .. } finally { close(is); } }這個item要強調的是,在Java7之後,使用try-with-resources會讓你的程式碼更精簡:
try( InputStream is = new FileInputStream(mConfigFilePath) ){ mProp.load(is); } catch (IOException e) { // need to handle .. }針對使用的說明,我之前已有文章做分享。這種寫法除了讓你程式碼更精簡外,以上述例子來說,如果load與close都發生例外,是可以透過Exception的getSuppressed去取得這兩個Exception的callstack。
Effective Java第三版Item 9。