iT邦幫忙

DAY 21
2

實戰 Java SE 7 系列 第 21

Project Coin - try-with-resource 語法

昨天的範例程式裡,我們得多做一些事情才能正確地關閉資料串流,像是在 try-catch 區塊外先宣告物件變數,然後在 final 區塊裡得先檢查物件變數是不是 null 等。Java SE 7 裡提供了一個簡便的新陳述式,來簡化這些事。
新的陳述式就叫做 try-with-resource 。簡單的說,就是把宣告資料串流物件這樣的程式碼,直接在在 try 的陳述式裡。我們直接看範例比較快:

package idv.jacky.ironman4.day21;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Day21Example1 {

	public static void main (String[] args) {
		try (BufferedReader br = new BufferedReader(new FileReader("c:\\temp.txt"))) {
			String line;
			while ((line = br.readLine()) != null)
				System.out.println(line);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

你可以看到程式碼第10行,原本 try 陳述式就只有一個 try 加上左大括號,現在變得跟方法一樣,多個小括號,然後把需要關閉的資料串流物件變數宣裡裡面,然後在 try 區塊裡,我們一樣能自由地使用 br 物件,也不用多個 final 區塊來關閉它,當程式離開 try-catch 區塊時,會自動把宣告在 try-with-resource 陳述式裡的資料串流物件給關閉!

Java 只是幫你呼叫 close 方法,雖然你沒看到也沒寫,但 close 方法會丟出的 IOException 一樣得處理。不過我們已經有 catch 了,close 和 readLine 方法都是在 catch 之前呼叫的,所以會一起被 catch 下來。如果你省略了 catch, 那就得在方法宣告上多宣告會丟出 IOException 喔!

package idv.jacky.ironman4.day21;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Day21Example2 {

	public static void main (String[] args) throws IOException {
		try (BufferedReader br = new BufferedReader(new FileReader("c:\\temp.txt"))) {
			String line;
			while ((line = br.readLine()) != null)
				System.out.println(line);
		}
	}
}

上一篇
複習 - 關閉資料流
下一篇
Project Coin - try-with-resource 語法 續
系列文
實戰 Java SE 7 31

尚未有邦友留言

立即登入留言