<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 193,  comments - 520,  trackbacks - 0
    今天的問題是關(guān)于異常,自然,今天的主角是異常之神。 

    我問:大神,異常到底是個什么東西哩?什么情況下我們需要拋出異常呢 
    果然是異常之神,很異常,反問:如果老婆叫你去超市買蝦,蝦剛好賣光了,你會怎么辦? 
    我想都沒想,說:給老婆打電話哈! 
    神仙說:這就是異常! 
    我說:不能完成買蝦這個任務(wù)? 
    神仙說:不在你控制范圍內(nèi)的因素所造成的問題、沒有預(yù)料到的情況就叫異常。在上面這個例子里,由于你沒法控制超市是否還有蝦,所以當(dāng)你面臨這個問題而又無法自己解決時就會拋出這個異常。 
    我說:哦,異常有兩個特點,一個是造成不能正常執(zhí)行任務(wù)的因素不在我的控制范圍,二是我自己沒有足夠的信息進行處理,只能拋出。 

    我問:我知道JAVA里異常有checked和runtime之分,用哪個好呢? 
    神仙說:繼續(xù)前面的問題,你和老婆打了電話,結(jié)果發(fā)現(xiàn)是女兒要吃蝦,這時會怎么辦呢? 
    我說:老婆會讓我等等,然后去問我女兒,然后再回答我,女兒說了,可以吃魚。 
    神仙說:實際處理這個問題的是你女兒? 
    我說:是的。 
    神仙說:那為什么你不直接讓你女兒接電話哩? 
    我說:因為女兒管她媽媽,她媽媽管我。 
    神仙說:如果是checked異常,那么盡管媽媽不能處理這個問題,她還是需要處理;如果是runtime,那么媽媽就不用操心啦。 
    我說:我明白了,checked異常強制我們在發(fā)生異常的地方進行處理,哪怕實際我并不能處理,只會產(chǎn)生一坨一坨的try catch,runtime能夠讓我們在能夠處理異常的地方才捕獲這個異常。 
    神仙說:異常處理有一項很重要的目標(biāo),就是將處理異常的代碼從異常發(fā)生的地方移開。這樣就能在一個地方集中精力去解決你想解決的問題,然后再到另一地方去處理這些異常問題。程序的主線就不會被異常處理這類枝節(jié)問題給搞得支離破碎,程序也更易于理解和維護。 
    我說,所以都用runtime異常,第三方的checked異常如果不能立即處理,那么也應(yīng)該轉(zhuǎn)為runtime。 
    神仙說,異常處理的一個重要準則是:如果你不知道該如何處理這個異常,那么你就別去捕捉它。 

    我說,太好了,checked異常必須處理,runtime異常不用處理! 
    神仙說,你會直接在用戶界面打印出一坨坨黑白相間的美妙異常棧? 
    我說,當(dāng)然不會,我會統(tǒng)一跳轉(zhuǎn)到一個出錯頁面。 
    神仙說,難道這不是對異常的處理嗎? 
    我說,恩,也是。 
    神仙說,所有異常必須處理!在程序里可以拋異常,但是決不能把異常拋給最終用戶。BUG在程序員手里還不是BUG,但是一旦交付,那么就是BUG。 

    我問:出現(xiàn)異常的地方我直接new RuntimeException()可以嗎?反正最后是告訴老婆買不成蝦。 
    神仙說,如果你女兒問為什么沒買到蝦怎么辦? 
    我說,我會告訴她蝦賣完了。 
    神仙說,信息在哪兒呢? 
    我說,我明白了,扔出異常一定要加上異常信息。 
    神仙說,非常重要!對于最終用戶可能僅僅是個出錯頁面,但是對于需要解決這個問題的程序員來說,異常信息就非常重要了。 
    我說,所以如果是自定義異常,那么一定要加異常信息;如果是checked異常轉(zhuǎn)runtime則一定要保存原有的異常,形成異常棧。 

    我問:好吧,我看到很多程序都自定義異常。 
    神仙說,如果是通貨膨脹錢沒帶夠而買不了蝦怎么辦? 
    我說,我會回家取錢。 
    神仙說,那么如果是蝦沒了呢? 
    我說,那買個鬼,賣魚羅。 
    神仙說,所以需要自定義異常,這樣可以產(chǎn)生不同的異常處理策略。 
    我說,如果需要對不同的異常進行不同的處理,那么就需要自定義異常。 
    神仙說,自定義異常需要有自己的繼承體系,這樣當(dāng)我不想單個處理時,可以對一種類型的異常采用統(tǒng)一的一種處理,例如spring的DataAccessException。 

    我暗喜:正在寫工作流異常模式哩,何不一起問一下?哈哈。 
    神仙說:未完待續(xù),敬請期待工作流異常的問與答。

    http://www.tkk7.com/ronghao 榮浩原創(chuàng),轉(zhuǎn)載請注明出處:)
    posted on 2010-09-19 22:03 ronghao 閱讀(2290) 評論(4)  編輯  收藏 所屬分類: j2se基礎(chǔ)

    FeedBack:
    # re: 關(guān)于異常的問與答
    2010-09-20 11:04 | 阿帕奇
    貼近生活,高于生活。  回復(fù)  更多評論
      
    # re: 關(guān)于異常的問與答
    2010-09-21 07:51 | macrotea
    貌似很生動,哈哈  回復(fù)  更多評論
      
    # re: 關(guān)于異常的問與答
    2010-09-21 07:54 | macrotea
    但是我有個疑問:
    當(dāng)程序中一個方法,不斷嵌套執(zhí)行其他的子方法,如果那些子方法出現(xiàn)了異常,不捕獲而是不斷外拋的話,那么如何知道在哪里出現(xiàn)了異常,我現(xiàn)在就是在子方法里面需要捕獲的地方都捕獲了,然后log一下.讓自己知道哪里出現(xiàn)了異常?這樣好不好  回復(fù)  更多評論
      
    # re: 關(guān)于異常的問與答
    2010-09-24 17:06 | changedi
    嗯,收藏了,黑體字的重點突出非常贊~~  回復(fù)  更多評論
      
    <2010年9月>
    2930311234
    567891011
    12131415161718
    19202122232425
    262728293012
    3456789

    關(guān)注工作流和企業(yè)業(yè)務(wù)流程改進。現(xiàn)就職于ThoughtWorks。新浪微博:http://weibo.com/ronghao100

    常用鏈接

    留言簿(38)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    常去的網(wǎng)站

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 丰满少妇作爱视频免费观看| 精品熟女少妇aⅴ免费久久| fc2免费人成在线| 久久大香香蕉国产免费网站| 成年女人毛片免费播放视频m| 亚洲成AV人网址| 在线观看亚洲人成网站| 亚洲AV无码一区二区三区牲色| 光棍天堂免费手机观看在线观看| 免费大片黄在线观看yw| 久久亚洲精品无码观看不卡| 亚洲人成网站日本片| 一级中文字幕乱码免费| 午夜福利不卡片在线播放免费| 亚洲精品色婷婷在线影院| 亚洲国产精品网站久久| aa级女人大片喷水视频免费| 免费观看黄网站在线播放| 亚洲乱码中文字幕综合| 亚洲精品V天堂中文字幕| 成人精品一区二区三区不卡免费看| 最近最新中文字幕完整版免费高清| 亚洲精品国偷自产在线| 亚洲成a人无码亚洲成www牛牛| 东方aⅴ免费观看久久av| 免费va人成视频网站全| 亚洲最大的视频网站| 三年在线观看免费观看完整版中文| 精品熟女少妇AV免费观看| 久久久亚洲精品国产| rh男男车车的车车免费网站| 国产精品成人免费视频网站京东| 亚洲V无码一区二区三区四区观看| 亚洲国产成人AV网站| 欧美最猛性xxxxx免费| 亚洲AV无码乱码在线观看裸奔| 免费播放国产性色生活片| 亚洲欧洲免费无码| 亚洲国产精品婷婷久久| 国产无限免费观看黄网站| 国产日产成人免费视频在线观看|