java 板


LINE

我曾經看過一個程式 是否有錯誤是採用回傳true or false來表示 boolean execute() 我問他怎麼這樣做? 他表示這樣比較有效率 我反問他 正常的情況下當然要有效率 可是難道發生錯誤也要很有效率嗎 所以就改成 void execute() throws Exception 我看過幾篇文章(我忘記是書還是文章了XD) 提供大家幾個我常用的原則 1.如果不知道怎麼處理例外~那就拋出吧 2.儘可能的只處理例外"一次"或"一種" 3.不要用例外當成業務邏輯的判別方式 4.如果不知道~盡量使用RuntimeException來拋出 首先什麼是例外(樓上有人回文了) 我自己的定義是 如果發生某種狀況使得整個作業或是方法必須停止,則為例外 例如 傳送檔案的時候,突然網路斷掉了,那麼這個狀況將造成整個傳送的作業中止 那麼就需要拋出例外 那麼什麼有編譯或執行 提供方法的API認為該例外有義務提醒使用該API的使用者 需要處理"有意義"的例外,那麼就要在編譯的時候好提醒使用者要注意 (這裡往往有個問題就是,雖然提供者很好心,但使用者往往也不知道該如何處理) 例如買便當的時候 必須要提醒使用者有下列的狀況會發生喔 1.沒有錢 2.買便當的人把錢A了 3.不夠錢買便當 4.便當老闆不賣便當了 5.買便當的人自己把便當吃掉了 以上這些就是自己認為有意義狀況的例外 就會採用編譯期的例外來提醒試使用者要注意(或處理) 但人算不如天算 總會有想不到的狀況會發生 1.買便當的被車撞了 2.買便當的失戀了,所以不上班了 3.買便當的就是不爽幫你買便當啦 4.便當被狗搶走了 5...... 有好多 這麼多 非常有夠多的狀況會發生 天下紅雨 娘要嫁人 晚上要看電視 結果卻爆炸了 還是 這個要放在 荷花的左邊 如果你想要預期上述的狀況 那大概你的程式寫到世界末日都還寫不完 (世界末日也是例外喔) 但是這些都有一種特質就是 該狀況都是會中止作業流程的,然後怎麼判別都判別不完 那就通通都拿去做RuntimeException拉 那麼在程式就不用事前去判別拉 (當然你要去判別也是可以) 例外並不是邏輯判別的一部份 那是因為要處理邏輯的時候 在某種狀況發生的時候不可避免的會導致邏輯處理的中止 可是跟邏輯的關係也不是很強烈的情況下 但是還是要處理 那麼就為例外 ※ 引述《Shrugg (淚眼問花花不語)》之銘言: : 想請問一個一直都沒辦法在邏輯上說服自己的觀念性問題 : 參考資料都說,程式的例外是用來擷取runtime時的例外情形,用來攔截例外的發生的. : 可是要是已經知道會有那些例外可能發生, : 設計程式時我們不是就會把限制條件給加上去了, : 根本不用等到例外發生了再來攔截吧? : Runtime會發生的例外都是設計程式時根本沒想到的,既然沒想到, : 為什麼會知道要怎麼去預防呢? : 像旗標的Java2第十四章以一個使用者輸入錯誤當例子,程式例只能輸入數字 : 但當使用者輸入字串時就會是一個例外,所以程式安排這邊設計一個攔截字串例外 : 發生時的處理. : 但是假設我是這個程式的開發者 : 我要是一開始就知道這個例外的存在,我就會設條件讓使用者不能輸入數字以外的資料了 : 如果我連這個例外都沒有預估到,我又怎麼會知道要去攔截這個例外呢? : 希望有人知道我在說甚麼 -- --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 163.29.29.131
1F:推 lashante:(鼓掌) 04/16 10:04
2F:→ cha122977:如果該function有return東西也不適合用return t/f 04/16 12:34
※ 編輯: swpoker 來自: 163.29.28.131 (04/16 14:31)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:BuyTogether站內搜尋

TOP