Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

編程語言 Java IDE 科技 Java爆炸百分百 Java爆炸百分百 2017-08-29

Java中的異常處理不是一個簡單的話題。初學者很難理解,甚至有經驗的開發人員也會花幾個小時來討論應該如何拋出或處理這些異常。

這就是為什麼大多數開發團隊都有自己的異常處理的規則和方法。如果你是一個團隊的新手,你可能會驚訝於這些方法與你之前使用過的那些方法有多麼不同。

然而,有幾種異常處理的最佳方法被大多數開發團隊所使用。下面是幫助改進異常處理的9個最重要的方法。

Java學習交流群548511899,歡迎喜歡Java的各位大神小神前來學習交流,每天晚上群裡面也會有大佬直播企業項目開發學習,更有各種項目案例供你自己學習哦

1. 在Finally中清理資源或者使用Try-With-Resource語句

通常情況下,你在try中使用了一個資源,比如InputStream,之後需要關閉它。在這種情況下,一個常見的錯誤是在try的末尾關閉了資源。

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

只要不拋出異常,這種方法就可以很好地運行。try內的所有語句都將被執行,資源也會被關閉。

但是,如果拋出異常,就無法到達try的末尾。所以應該將清理資源的代碼放入Finally中,或者使用Try-With-Resource語句。

如何使用Finally

相比於try,無論是在成功執行try裡的代碼後,或是在catch中處理了一個異常後,Finally裡的內容是一定會被執行的。因此,可以確保清理所有已打開的資源。

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

Java 7的Try-With-Resource語句

另一個選擇是Try-With-Resource語句,在introduction to Java exception handling中更詳細地說明了這一點。

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

如果你的資源實現了AutoCloseable接口,就可以使用它,這正是大多數Java標準資源所做的。當你在try子句中打開資源時,它將在try被執行後自動關閉,或者處理一個異常。

2. 給出準確的異常處理信息。(你拋出的異常越具體越好。)

要儘量能更好地描述你的異常處理信息,比如用NumberFormatException代替IllegalArgumentException,避免拋出一個不具體的異常。

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

3. 記錄你所指定的異常

當你在方法中指定一個異常時,你應該在Javadoc中記錄下它。這與前面提到的方法有著相同的目標:為調用者提供儘可能多的信息,這樣他們就可以避免異常或者更容易地處理異常。

因此,請確保在Javadoc中添加一個@throws 聲明,並描述可能導致的異常情況。

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

4. 使用描述性消息拋出異常

一個很好的例子就是,當你以錯誤的格式使用字符串時,如NumberFormatException,它就會被類 java.lang.Long的構造函數拋出。

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

NumberFormatException已經告訴你問題的類型,所以只需要提供導致問題的輸入字符串。如果異常類的名稱不具有表達性,那麼就需要提供必要的解釋信息。

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

5. 最先捕獲特定的異常

大多數IDE都可以幫助你做到這點,當你試圖捕獲不確定的異常時,它會報告一個不可到達的代碼塊。

問題是隻有第一個匹配到異常的catch語句才會被執行,所以,如果你最先發現IllegalArgumentException,你將永遠不會到達catch裡處理更具體的NumberFormatException,因為它是IllegalArgumentException的一個子類。

所以要首先捕獲特定的異常類,並在末尾添加一些處理不是很具體異常的catch語句。

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

第一個catch處理所有NumberFormatExceptions異常,第二個catch 處理NumberFormatException異常以外的illegalargumentexception異常。

6. 不要在catch中使用Throwable

如果你在catch子句中使用Throwable,它將不僅捕獲所有的異常,還會捕獲所有錯誤。JVM會拋出錯誤,這是應用程序不打算處理的嚴重問題。

典型的例子是OutOfMemoryError或StackOverflowError。這兩種情況都是由應用程序控制之外的情況引起的,無法處理。

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

所以,最好不要在catch中使用Throwable,除非你完全確定自己處於一個特殊的情況下,並且你需要處理一個錯誤。

7. 不要忽略Exceptions

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

8. 不要記錄和拋出一個異常

Java學習交流群548511899,歡迎喜歡Java的各位大神小神前來學習交流,每天晚上群裡面也會有大佬直播企業項目開發學習,更有各種項目案例供你自己學習哦

這可能是最常被忽略的。你可以在許多代碼片段或者庫文件裡發現,有異常會被捕獲、記錄和重新拋出。

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

當它發生時記錄一個異常,然後重新拋出它,以便調用者能夠適當地處理它,這可能會很直觀。但是它會為同一個異常寫多個錯誤消息。

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

不添加任何額外的信息。正如在上述第4箇中所解釋的那樣,異常消息應該描述異常事件。堆棧會告訴你在哪個類、方法和行中異常被拋出。

如果你需要添加額外的信息,應該捕獲異常並將其包裝在一個自定義的信息中。但要確保遵循下面的第9條。

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

因此,只需要捕獲一個你想要處理的異常,在方法中指定它,並讓調用者處理它。

9. 包裝異常

Java中處理異常的9個最佳實踐,現在公司最看重的就是這個

有時最好捕獲一個標準異常並將其封裝到一個定製的異常中。此類異常的典型例子是應用程序或框架特定的業務異常。這允許你添加額外的信息,並且也可以為異常類實現一個特殊的處理。

異常通常是一個錯誤處理機制和一個通信媒介。大家要一起討論想要應用的最佳實踐和方法,以便每個人都理解通用概念並以相同的方式使用它們。

相關推薦

推薦中...