前幾天,公司的一個漂亮MM下午的時候突然腳就痛了,然後問她什麼回事,她說她自己也不知道是為什麼,脫了鞋一看,應該是紐到腳了,腫得很厲害。世界上的很多事情都是這樣,你不去注意,不去想,它們幾乎都是那樣的熟悉,那樣的一般,那樣的正常。但是如果我們仔細的想想,或許就能悟出很多的道理來。假如我們的手被東西給割破了,流血了,我們就馬上知道疼痛了,在大多數人眼中疼痛似乎不是個好東西。要是我們不會疼痛會不會很爽呢?答案是否定的。如果我們的手被割破了,我們不知道疼痛,那麼我們就不會馬上進行處理,結果肯定是出血過多而出現生命危險。我們有理由相信曾經有這樣生物,受傷後卻不沒有知覺,終於經過漫長的自然選擇,這些生物不存在了。所以,今天能看到這篇文章的人都是知道疼痛的。
上面的閑話說了這麼多,我們現在進入正題。假如你的程式也如那些沒有知覺的人一樣,結果會怎樣呢。不能否認程式在運行中一定會出現異常,如果程式出現了異常,我們卻絲毫不能覺察到,時間一久,裡面的資料的完整性一定會遭到破壞。很多新手,很怕異常,於是來個了很大的Try,然後catch下,裡面什麼都不做。這種做法很不推薦,既然捕獲了異常,就要對它進行適當的處理。有異常出現,就說明程式在運行中出現了技術上的或者業務上的錯誤。異常的意圖是讓你知道發生了錯誤,而不是讓你難堪。
來看段常見的代碼:
int test = 0;
int result = 9 / test;
運行後出現異常:試圖除以零。好丟人啊!改下
try
{
int test = 0;
int result = 9 / test;
}
catch
{
}
別人看不到異常了。可是事實上我們程式確實出現了異常,我們不能自欺欺人。try
{
int test = 0;
int result = 9 / test;
}
catch (System.DivideByZeroException ex)
{
throw new DemoException(123, "使用者試圖輸入被除數'0',進行除法運算");//重新封裝,冒泡
}
cath(DemoException ex)
{
//假設這個異常我們能處理,就在這裡直接處理了
}
catch (Exception ex)
{
throw new DomoException(000,ex);
}
不但我們要善於利用.net的異常,也要學會自己產生異常。如:publi int Age
{
get{return _Age;}
set
{
if(value<0)
_Age=0;
if(value>55)
throw new InputEmployeeException("年齡已經超過退休年齡");
_Age=value;
}
}
說到異常,很多人都知道要把異常log起來。主要原因就是屏蔽這些技術,讓客戶看到友好的提示,而將這些異常留給我們,以便我們更好的重構或者維護我們的程式。