2012-09-06 50 views
0

我知道這樣的問題可能取決於程序員打算讓他的程序做什麼,然而在學校我們被教導到從來沒有拋出或捕獲Exception(該類),而是確保它拋出一個更具體的子類我們預計會發生運行時錯誤(例如IllegalArgumentException)。然而,我現在正在工作,在'現實世界'中,我看到了很多我在編寫代碼的場景,以前的程序員在方法中拋出了所有內容,或者捕獲了Exception而不是其中一個更具體的子類。發現或捕獲異常類(每個異常都可能)是錯誤的嗎?

所以我不知道,它是確定引發和捕獲一切就是這樣,這是不好的編程這樣做呢?

+0

簡答:永遠不會發生異常。長答案:永遠不會拋出異常,拋出是好的。 –

回答

1

我的想法是,處理異常也應取決於你正在創建的應用程序類型的方式。例如,如果您正在開發某種框架或庫,您不應該嘗試打印錯誤消息或記錄它們,那麼您已經拋出它們,因爲它將由其他開發人員負責使用您的框架/庫來處理異常他們正在使用你的代碼時優雅。

如果你正在開發某種前端應用程序,那麼你應該與異常處理更加細膩。我認爲最好在可能的情況下使用自己的異常類,因爲這會幫助您稍後在應用程序中指出錯誤或運行時問題。當你處理異常時,你應該從更具體的例外到一般例外。最後,您應該處理「Exception」超類的異常,以確保您的應用程序不會崩潰,最好是在應用程序的主入口點應該有一個try-catch塊。在處理異常日誌記錄錯誤時發生的事情在後來診斷錯誤時是一種很好的做法。

0

這是不好的做法,就像你所學到的一樣。

該規則的一個主要例外是頂級異常處理程序(用於捕獲未處理的異常) - 其目的是記錄異常,以便開發人員稍後可以讀取它們並用於修復應用程序(和通常會重新拋出,以便使應用程序崩潰 - 而不是將其置於不一致的狀態)。

1

這是沒有錯要做到這一點,但它可以讓你的生活調試非常困難。許多人會捕獲異常類並記錄Exception.Message。沒有足夠的細節,尤其是如果你在大型系統上工作,而你不能總是通過實時代碼等,這將是一項乏味的任務。

我傾向於捕捉特定的異常,並相應地處理它們,但我也捕捉到了異常類,以確保所有異常被捕獲前進(一個對象可能被改變,包括在未來框架版本的詳細例外)。