jdk1.7新特性之 try-with-resources

在早前一段時間接觸到這個特性,當時以爲沒什麼大不了的(主要是當時不瞭解),多是本身當初看的時候沒辣麼仔細吧!哈哈,如今從新接觸感受挺不錯的,特此記錄下來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

相關文章
相關標籤/搜索