Java 處理資源的try語句 (try-with-resources, TWR)

JAVA中try塊的標準形式很通用,但有些常見的情況需要開發者小心編寫catchfinally塊。這些情況是清理或關閉不再需要使用的資源。

正常情況下,我們用try-catch-finally語句來實現打開文件資源,最後再關閉清理文件資源。例如下面的代碼:

public class test1 {

	public static void main(String[] args) {
		FileInputStream file = null;
		try {
			file = new FileInputStream(new File("demo.txt"));
			/*
			 * 處理這個文件的操作
			 */
		} catch(IOException e){
			e.printStackTrace();
		} finally {
			//關閉資源
			if(file != null) {
				try {
					file.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		}	
	}
}

發現這種操作很繁瑣,代碼也很多,那有沒有什麼簡便的方法呢?
就像python裏面的with語句一樣呢
在這裏插入圖片描述
那麼恭喜你,確實有!
Java(從第7版起)提供了一種機制,能自動關閉需要清理的資源——處理資源的try語句(try-with-resources, TWR)
下面簡單展示如何使用FileInputStream類打開文件(得到的對象需要處理)來介紹語法:

public class test1 {

	public static void main(String[] args) {
		try(InputStream is = new FileInputStream("demo.txt")){
			/*
			 * 處理這個文件的操作
			 */
		}catch (IOException e) {
			//這裏處理FileNoFoundExceotion等異常
			e.printStackTrace();
		} 
	}
}

發現這種新型的方法,去掉了finally塊,而且不需要編寫catch塊。
這種新型try語句的參數都是需要清理的對象。這些對象(嚴格來說,這些對象必須實現AutoCloseable接口)的作用域在try塊中(也就是把要釋放的資源寫在 try 後的()中),不管 try 塊以何種方式退出,都會自動清理。開發者無需編寫任何catchfinally塊,Java編譯器會自動插入正確的清理代碼。
因此,我建議所有處理資源的新代碼都應該使用TWR形式編寫,因爲這種形式比自己手動編寫catch塊更少出錯,而且不會遇到麻煩的技術問題,例如終結機制

好了現在的Java:

在這裏插入圖片描述


注:表情來源於網絡:侵權刪

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