java基礎之連接關閉處理——try-with-resource代碼塊

try-with-resource——優雅的處理資源關閉問題

我們都知道,對於資源來的連接,比如數據庫連接,文件輸入輸出流等,不管是正常執行完成還是在執行過程中出現了異常,都需要對我們使用的資源進行釋放,在JAVA7以前,可以使用try-catch-finally/try-finally進行處理,finally就是不管try/try-catch中的邏輯是否正常走完,都會走入finally語句中,甚至是前面使用了return語句想跳出該方法執行邏輯都不行,finally中的代碼塊還是會執行的。所以finally中的語句塊用來標記必須執行的代碼片段,比如連接資源的釋放,是再好不過的。
對於java7以及以後發佈的版本,新增了try-with-resource這種代碼書寫格式,具體示例如下:

    public void readFile(String filePath) throws IOException {
		//直接在括號裏面定義初始化對象即可
        try (BufferedReader br = new BufferedReader(new FileReader(filePath))) {
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        }
	}

等效於try-catch-finally的格式(也就是java7以前,當然了7以後也可以使用這種格式):

      public void readFile(String filePath) throws IOException {
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader("file.txt"));
            String line;
            while ((line = br.readLine()) != null) {
                System.out.println(line);
            }
        }  finally {
            if (br != null) {
                br.close();
            }
        }
    }

使用條件:

任何實現AutoClosable接口的類,當然了也包括Closable接口(Closable接口繼承了AutoClosable)。

使用方式:

對於實現了AutoClosable接口的需要使用優雅自動關閉代碼方式的,在try後面的括號中初始化該對象即可,多個可以使用分號(java中的分行符)隔開。
注意:在try後面的括號中,只能有對象的初始化代碼,不能包含其它代碼邏輯,否則編譯不通過,是非法的代碼格式,一般常用的IDE工具都能夠提示出來。
多資源示例:

        try (BufferedReader br = new BufferedReader(new FileReader("file.txt"));
         BufferedWriter bw = new BufferedWriter(new FileWriter("file.txt"))) {
			//do something
        }

注意(NOTE)

try-with-resource也可以和try一起連着catch以及finally使用,但是在try-with-resource代碼快中,catch或者finally中的代碼塊是在資源被關閉後才執行的。

有興趣的可以看下官方文檔https://docs.oracle.com/javase/tutorial/essential/exceptions/tryResourceClose.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章