作者 | fcamel (飛啊!乘月的小駱駝) | 看板 | P_fcamel |
標題 | [java] [轉錄] Shit^(TM) Happens |
時間 | Sun May 8 03:24:29 2005 |
真是超棒的建議, 我曾經想過類似的問題,
但沒想到好解法, 原來用shit happends就可以處理了, 真是太棒啦!!
from:
http://www.oreilly.com.tw/column_sleepless.php?id=j001
Shit^(TM) Happens
不要用鄙夷的眼光看待這個標題。其實「Shit Happens」是個名言,而且還是個
具有禪意的名言。 電影阿甘正傳(Forrest Gump)中,阿甘在跑步時踩到 shit
,旁邊一位失意的商人問他對此事的看法,阿甘表情輕鬆地說:「Shit
Happens.」,這句話的意思是「人生偶而會有不順遂的事發生,沒什麼值得大驚
小怪的」。這個商人於是將「SHIT HAPPENS」做成標語,結果大賣。電影下一幕
鏡頭出現一台後面貼有「SHIT HAPPENS」標語的汽車,飛來橫禍地被後面的另一
台車子撞了……果真是「Shit Happens」。
「…… 這和本文章有什麼關係???」別急,繼續看下去吧!
Java 程式員對於例外處理機制(exception handling mechanism)應該都不陌
生,因為 Java 語言強制程式員必須使用例外處理來捕捉(catch)非執行時期
(non-runtime)的例外。所以你一定用過 try,catch,finally 這三個 Java
語言的關鍵字,而且你也很有可能用過 throw 這個關鍵字來將未處理的例外再
轉出去給 call stack 的下一層 method。但是,你很有可能未曾主動 new 一個
例外物件,然後將其丟出。你更有可能未曾定義過自己的例外類別。
在用 Java 設計中大型系統的時候,常常有必要定義自己的例外類別,並在適當
時機主動地丟出例外。如此一來可以使得程式更穩固。
對於定義自己的例外類別,我的習慣是:
1. 如果此例外屬於 runtime 性質,且可以補救,則此例外繼承自
java.lang.RuntimeException。
2. 如果此例外不屬於 runtime 性質,且可以補救,則此例外繼承自
java.lang.Exception。
3. 如果此例外不可以補救,則此例外繼承自 java.lang.Error。
上述這三點完全是依照 Java 語言對於例外處理的建議,相當直覺,我也就不多
解釋了。除此之外,我還定義了一個我常用的例外類別,叫做 Shit,其定義如
下:
package com.skittles;
public class Shit extends RuntimeException {
private String whatHappened;
private Shit() {}
public Shit(String whatHappened) {
this.whatHappened = whatHappened;
}
public String toString() {
return whatHappened;
}
}
在程式中,對於一些我認為絕對不可能會發生的情況,我會丟出 Shit,代表程
式出現了絕對不應該發生的狀況。如果出現這個例外,表示程式內部有奇怪的錯
誤。在測試程式時,如果 Shit Happens,我會去追查其源頭,將錯誤找出來訂
正。
之所以讓 Shit 繼承自 RuntimeException,就是因為它應該不可能發生,將它
定成 RuntimeException 可以使得程式不用去 catch 它。
在程式的撰寫與測試階段,Shit Happens 是免不了的。但是,在程式交給客戶
或上線之後,就得確定程式正確無誤。No more shit happens.
本文作者:蔡學鏞
張貼日期:5/19/00
|