在早前一段時間接觸到這個特性,當時以爲沒什麼大不了的(主要是當時不瞭解),多是本身當初看的時候沒辣麼仔細吧!哈哈,如今從新接觸感受挺不錯的,特此記錄下來java
在java6以前咱們的資源管理語法模式大概是這樣的:.net
byte[] buf = new byte[1024]; FileInputStream fin = null; FileOutputStream fout = null; try { //資源操做 fin = new FileInputStream(args[0]); fout = new FileOutputStream(args[1]); int i = fin.read(buf, 0, 1024); while(i != -1) { fout.write(buf, 0, i); i = fin.read(buf, 0, 1024); } } catch (Exception e) { //異常處理 e.printStackTrace(); } finally { //資源釋放 try { fin.close(); fout.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
如今在java7中,咱們能夠這樣寫了:code
byte[] buf = new byte[1024]; try (FileInputStream fin = new FileInputStream(args[0]); FileOutputStream fout = new FileOutputStream(args[1]) ){ //異常處理 int i = fin.read(buf, 0, 1024); while(i != -1) { fout.write(buf, 0, i); i = fin.read(buf, 0, 1024); } } catch (Exception e) { e.printStackTrace(); } }
看了上面的代碼會不會覺的很清晰,也以爲很cool,反正我是以爲很cool了。
接口
在java7中,放在try括號裏的資源會在try執行完畢後自動關閉,這樣減小了咱們編寫錯誤代碼的概率了,由於咱們在處理資源的時候不免發生錯誤。並且資源的各類組合錯誤很讓人頭疼的。不過,使用這個新特性的時候有幾點要注意:資源
1. 在TWR的try從句中的出現的資源必須實現AutoCloseable接口的, 在java7中,大多數資源都被修改過了,能夠放心使用it
2. 在某些狀況下資源可能沒法關閉,好比io
FileReader reader = new FileReader(new File("c:\\test.txt"));
當new File出錯時,FileReader就可能關閉不了,因此正確的作法是爲各個資源聲明獨立變量class
最後,推薦一篇博文 http://www.oschina.net/question/12_10706,也是講這個新特性的test