|
|
|
分享內容
4人
我們直接來看下面的例子:
上面的程式碼裡,在第12行我們建立了一個 FileReader 的物件,要程式去開啟 c:\\temp.txt 這個檔案。在產生 FileReader 物件時,若無法找到指定的案,會丟出 FileNotFoundException。接著我們將產生好的 FileReader 物件傳入 BufferedReader 建構子,來產生 BufferedReader 的物件。第13行,我們使用 BufferedReader 物件所提供的 readLine 方法,來讀取檔案中的第一行資料。這個方法如果讀取失敗的話,會丟出 IOException。
因為第12、13行都有可能會丟出例外,所以我們在第14行用 catch 來處理它,因為懶得寫那麼多個 catch,所以就直接 catch Exception。可是我們希望呼叫這個方法的人,能進一步地處理這兩個例外,所以我們在 catch 區塊裡什麼也沒做,就直接又把例外丟出來。
如果我們要把例外丟出你的方法外的話,需要在方法的宣告上,明確的指定你這個方法會丟出什麼例外。所以我們就在第10行的方法宣告上宣告說,我會丟出 IOException 和 FileNotFoundException。

不幸地,這個例子在 Java SE 7 版之前是沒有辦法編譯的!因為我們在第14行已經透過多型轉型的方式,將 IOException 和 FileNotFoundException 轉成 Exception 型別了, 最後在第15行丟出來的是 Exception 型別,而不是 IOException 和 FileNotFoundException 型別。
所以在 Java SE 7 版之前,我們只有兩種方式來解決這個問題:
1. 在方法的宣告上,直接宣告丟出 Exception
2. 多重 catch 分別來處理
Java SE 7知道我們想要偷懶一點,所以剛剛這個例子直接拿去給 Java SE 7 編譯是會沒有錯誤地!也就是說 Java SE 7 的編譯器會很聰明地去檢查程式碼是不是只會丟出 IOException 和 FileNotFoundException 這兩種例外,所以你就可以偷懶囉~~
package idv.jacky.ironman4;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
public class Day15Example {
public void foo() throws IOException, FileNotFoundException {
try {
BufferedReader br = new BufferedReader(new FileReader("c:\\temp.txt"));
String line = br.readLine();
} catch (Exception e) {
throw e;
}
}
}
上面的程式碼裡,在第12行我們建立了一個 FileReader 的物件,要程式去開啟 c:\\temp.txt 這個檔案。在產生 FileReader 物件時,若無法找到指定的案,會丟出 FileNotFoundException。接著我們將產生好的 FileReader 物件傳入 BufferedReader 建構子,來產生 BufferedReader 的物件。第13行,我們使用 BufferedReader 物件所提供的 readLine 方法,來讀取檔案中的第一行資料。這個方法如果讀取失敗的話,會丟出 IOException。
因為第12、13行都有可能會丟出例外,所以我們在第14行用 catch 來處理它,因為懶得寫那麼多個 catch,所以就直接 catch Exception。可是我們希望呼叫這個方法的人,能進一步地處理這兩個例外,所以我們在 catch 區塊裡什麼也沒做,就直接又把例外丟出來。
如果我們要把例外丟出你的方法外的話,需要在方法的宣告上,明確的指定你這個方法會丟出什麼例外。所以我們就在第10行的方法宣告上宣告說,我會丟出 IOException 和 FileNotFoundException。

不幸地,這個例子在 Java SE 7 版之前是沒有辦法編譯的!因為我們在第14行已經透過多型轉型的方式,將 IOException 和 FileNotFoundException 轉成 Exception 型別了, 最後在第15行丟出來的是 Exception 型別,而不是 IOException 和 FileNotFoundException 型別。
所以在 Java SE 7 版之前,我們只有兩種方式來解決這個問題:
1. 在方法的宣告上,直接宣告丟出 Exception
2. 多重 catch 分別來處理
Java SE 7知道我們想要偷懶一點,所以剛剛這個例子直接拿去給 Java SE 7 編譯是會沒有錯誤地!也就是說 Java SE 7 的編譯器會很聰明地去檢查程式碼是不是只會丟出 IOException 和 FileNotFoundException 這兩種例外,所以你就可以偷懶囉~~
哈哈
哭
怒
驚
毆飛
暈
開心
飛
抗議
落寞
睡覺
讚
忙
噴鼻血
No
汗
失神
爆氣
疑惑
Orz
冷
病
不耐煩
喜歡
臉紅
噎到
放手
打嗑睡
掰掰
放馬過來
敲碗
簽名
筆記
拍手
沙發
囧
XD
無言
偷笑
翻桌
謝謝
灑花
窮
瞎
倒
抱抱
逃跑
嗚
炸死你
愛你
遜
生日快樂
空
rock
嘆氣
下雨
衝刺
搖頭
吃
飽
醉
拍照
打球
健身
駭客
射門
泡湯
踹共
唱歌
做菜
▼ ADVERTISEMENT ▼
邦友收藏動態
- 推動BYOD的3大安全管控作法 (chungyih)
- 俄國氣象衛星拍攝出1.21億畫素的地球照片 (mtc6009)
- BYOD案例:IBM從開放Mac筆電到自建企業專屬App商店 (enchi)
- 員工自帶設備上班:BYOD的兩難 (enchi)
- 拿高階電腦當Server的優點? (rex745)
- 知識管理解決方案採購指南 (dgtbb1980)
- 文件管理系統採購大特輯 (dgtbb1980)
- BPM解決方案─超義Power Process BPM Suite 6.0 (dgtbb1980)
- 微軟推出新版BPM軟體BizTalk Server 2010 (dgtbb1980)
- 超義入門款BPM系統,不寫程式也能快速建立流程 (dgtbb1980)
相關問答
- OpenOffice 用Java 做什麼?
- 鐵人賽之期末報告
- 第二屆鐵人賽開始啦,想參賽的必讀哦
- 鐵人賽之期中報告
- 2009第2屆iT邦幫忙鐵人賽得獎名單公佈
- Java程序員非常適合學習Flex - (第一篇)
- 如何取得 adempiere 的 java source code
- 鐵人賽大富翁不能用@@
- [分享不分大小事]不分軟硬三十篇-第19篇 星期天輕鬆分享「it邦鐵人賽」機會贈品、沒參賽的人明年要參加喔!
- 第二屆鐵人賽消失的第四篇文章!
- 2009第二屆iT邦幫忙鐵人賽-鐵人鍊成獎&早鳥獎得獎名單
- Java部落格程式的寫法?
- 請問 iT help 如何重新加入鐵人賽事
- 請問 如何在 java 使用 facebook 的 fql?
- JSP 和Java Mail part2
- 轉吧轉吧鐵人大富翁~比賽開始了!!
- JAVA程式設計新手~
- 鐵人大富翁會外賽得獎公告
- 有看到鐵人賽裡-alice425 部落格小撇步30招
- 誰可以跟我說明 iT邦部落格,鐵人競賽的規則?


