java使用resource時,使用try-with-resources代替try-catch-finally


try-with-resources是jdk1.7加入的機制,可以保證資源使用后正常關閉,並使代碼更加簡潔。

 

try-catch-finally使用實例:

public void handle(String fileName) {
    BufferedReader reader = null;
    try {
        String line;
        reader = new BufferedReader(new FileReader(fileName));
        while ((line = reader.readLine()) != null) {
            ...
        }
    } catch (Exception e) {
        ...
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                ...
            }
        }
    }
}

可以看到為了保證resources正常關閉,finally中又使用if語句以及try-catch,增加了代碼的復雜性。

 

try-with-resources使用實例:

public void handle(String fileName) {
    try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) {
        String line;
        while ((line = reader.readLine()) != null) {
            ...
        }
    } catch (Exception e) {
        ...
    }
}

可以看到,try-with-resources的比前一種方法明顯節省了很多代碼,資源在try后邊的()中生成,在try結束后程序會自動關閉資源。

 

如果需要聲明多個資源,可以在try后面的()中,以;分隔;也就是說,try后邊的()可以添加多行語句。

try (BufferedReader reader1 = new BufferedReader(new FileReader(fileName1));
  BufferedReader reader2 = new BufferedReader(new FileReader(fileName2));) {
  ...
} catch (Exception e) {
  ...
}

 

需要注意的是,try后邊括號中聲明的資源必須實現java.lang.AutoCloseable,如果聲明沒實現這個接口的變量,IDE會進行提示'The resource type File does not implement java.lang.AutoCloseable'。

比如我在里面聲明了一個File類型的變量:

 

參考:

1.教你消滅 Java 代碼的“壞味道” : https://mp.weixin.qq.com/s/rGXb_weYLVu0xQ2NmarBlQ

2.Java – Try with Resources : https://www.baeldung.com/java-try-with-resources

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM