2013-04-21 61 views
0

你好,我試圖更清楚地瞭解何時使用異常以及何時不使用它們。我會舉幾個例子。你能讓我知道哪些情況下我應該使用異常,並解釋爲什麼我應該或不應該這樣做? (注意:這不是一個家庭作業問題)。場景1:我設計了一個電腦遊戲,其中每個單位都可以移動到棋盤上的一個方形區域。但是,有些廣場可能會被阻擋。我應該拋出一個SquareIsBlockedException來防止單位的移動?適當和不正確地使用異常處理?

場景2:我向數據庫插入一條記錄,但是它失敗了,因爲存在唯一ID。它拋出一個DuplicateIDException。

爲什麼我應該爲方案2使用例外情況,而不是方案1?

+0

這是Java,對吧? – leppie 2013-04-21 18:58:28

+0

這個問題已經被問過很多次了。 http://stackoverflow.com/q/77127/1515052 – Simulant 2013-04-21 19:00:26

回答

1

1)不是。一個被阻擋的方塊不是例外的東西 - 人們可以認爲它在你的遊戲中很常見。當程序中發生的事情不應該發生時,應該拋出異常。

2)可能。將重複記錄插入數據庫是不應該正常發生的事情。它也可能暗示一個錯誤。

如果引發異常,則停止執行流程。這很好 - 在你的系統發現它插入了一個重複行後,它應該怎麼做?您很可能沒有準備好您的系統在這種情況下行爲正確。另外,您可以(在您的調試器,日誌等中)查看出了什麼問題,這使得修復代碼變得更加容易。

0

這一切都取決於用例,在你的兩個例子中,它可能是有意義的使用異常或不。

例外應該用於...例外。 Web中有一些「錯誤代碼」示例,其中Exceptions用於流量控制。不要這樣做。

因此,Ex1聽起來像是流量控制,使用if或語言流量控制。

在Ex2顯式控制重複可以導致更多的代碼,當有必要首先擊中數據庫來查找ID是否已經在。是ID是一個自動ID,使用異常,因爲正常情況下是自動。 ID都是不同的。 id是用戶可編輯的數據字​​段(例如名稱),如果Id已經存在,則首先查找。