国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Java異常處理12條軍規

zeyu / 530人閱讀

摘要:非檢查異常是不需要在子句中聲明的異常。在高執行級別,應記錄此類異常。是最為嚴重的運行時錯誤,幾乎是不可能恢復和處理,一些示例是,和。捕獲異常時,也不要捕獲范圍太大,例如捕獲,相反,只捕獲你能處理的異常,應該處理的異常。

摘要: 簡單實用的建議。

原文:Java異常處理12條軍規

公眾號:Spring源碼解析

Fundebug經授權轉載,版權歸原作者所有。

在Java語言中,異常從使用方式上可以分為兩大類:

CheckedException

UncheckedException

在Java中類的異常結構圖如下:

可檢查異常需要在方法上聲明,一般要求調用者必須感知異常可能發生,并且對可能發生的異常進行處理。可以理解成系統正常狀態下很可能發生的情況,通常發生在通過網絡調用外部系統或者使用文件系統時,在這種情況下,錯誤是可能恢復的,調用者可以根據異常做出必要的處理,例如重試或者資源清理等。

非檢查異常是不需要在throws子句中聲明的異常。JVM根本不會強制您處理它們,因為它們主要是由于程序錯誤而在運行時生成的。它們擴展了RuntimeException。最常見的例子是NullPointerException 可能不應該重試未經檢查的異常,并且正確的操作通常應該是什么都不做,并讓它從您的方法和執行堆棧中出來。在高執行級別,應記錄此類異常。

Error是最為嚴重的運行時錯誤,幾乎是不可能恢復和處理,一些示例是OutOfMemoryError,LinkageError和StackOverflowError。它們通常會使程序或程序的一部分崩潰。只有良好的日志記錄練習才能幫助您確定錯誤的確切原因.

在異常處理時的幾點建議:

1. 永遠不要catch中吞掉異常,否則在系統發生錯誤時,你永遠不知道到底發生了什么
catch (SomeException e) {  
    return  null;
}
2. 盡量使用特定的異常而不是一律使用Exception這樣太泛泛的異常
public void foo() throws Exception { //錯誤的做法}
public void foo() throws MyBusinessException1, MyBusinessException2 { //正確的做法}

一味的使用Exception,這樣就違背了可檢查異常的設計初衷,因為調用都不知道Exception到底是什么,也不知道該如何處理。捕獲異常時,也不要捕獲范圍太大,例如捕獲Exception,相反,只捕獲你能處理的異常,應該處理的異常。即然方法的聲明者在方法上聲明了不同類型的可檢查異常,他是希望調用者區別對待不同異常的。

3. Never catch Throwable class

?永遠不要捕獲Throwable,因為Error也是繼承自它,Error是Jvm都處理不了的錯誤,你能處理?所以基于有些Jvm在Error時就不會讓你catch住。

4. 正確的封裝和傳遞異常**

不要丟失異常棧,因為異常棧對于定位原始錯誤很關鍵

catch (SomeException e) {throw  new MyServiceException("Some information: " + e.getMessage());  //錯誤的做法}

一定要保留原始的異常:

catch (SomeException e) {   throw new MyServiceException("Some information: " , e);  //正確的打開方式}
5. 要打印異常,就不要拋出,不要兩者都做
catch (SomeException e) {   
    LOGGER.error("Some information", e);
    throw e;
}

這樣的log沒有任何意義,只會打印出一連串的error log,對于定位問題無濟于事。

6. 不要在finally塊中拋出異常

如果在finally中拋出異常,將會覆蓋原始的異常,如果finally中真的可能會發生異常,那一定要處理并記錄它,不要向上拋。

7. 不要使用printStackTrace

要給異常添加上有用的上下文信息,單純的異常棧,沒有太大意義

8. Throw early catch late

異常界著名的原則,錯誤發生時及早拋出,然后在獲得所以全部信息時再捕獲處理.也可以理解為在低層次拋出的異常,在足夠高的抽象層面才能更好的理解異常,然后捕獲處理。

9. 對于使用一些重量級資源的操作,發生異常時,一定記得清理

如網絡連接,數據庫操作等,可以用try finally來做clean up的工作。

10. 不要使用異常來控制程序邏輯流程

我們總是不經意間這么做了,這樣使得代碼變更丑陋,使得正常業務邏輯和錯誤處理混淆不清;而且也可能會帶來性能問題,因為異常是個比較重的操作。

11. 及早校驗用戶的輸入

在最邊緣的入口校驗用戶的輸入,這樣使得我們不用再更底層邏輯中處處校驗參數的合法性,能大大簡化業務邏輯中不必要的異常處理邏輯;相反,在業務中不如果擔心參數的合法性,則應該使用衛語句拋出運行時異常,一步步把對參數錯誤的處理推到系統的邊緣,保持系統內部的清潔。

12. 在打印錯誤的log中盡量在一行中包含盡可能多的上下文
LOGGER.debug("enter A");LOGGER.debug("enter B"); //錯誤的方式
LOGGER.debug("enter A, enter B");//正確的方式

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/77572.html

相關文章

  • 20W字囊括上百個前端面試題的項目開源了

    摘要:字囊括上百個前端面試題的項目開源了這個項目是什么項目內容這個項目目前在上剛剛開源主要內容如下前端面試題主要整理了高頻且有一定難度的前端面試題對這些面試題進行解讀前端原理詳解針對一些有一定難度面試題涉及的知識點進行詳解比如涉及的編譯原理響應式 20W字囊括上百個前端面試題的項目開源了 這個項目是什么? 項目內容 這個項目目前在GitHub上剛剛開源,主要內容如下: 前端面試題: 主要整...

    Euphoria 評論0 收藏0
  • 從“雅虎軍規”看性能優化

    摘要:避免重定向重定向用和狀態碼,下面是一個有狀態碼的頭瀏覽器會自動跳轉到域指明的。除此之外還有別的跳轉方式元標簽和,但如果你必須得做重定向,最好用標準的狀態碼,主要是為了讓返回按鈕能正常使用。要提高性能,優化這些響應至關重要。 showImg(https://segmentfault.com/img/bVbmMsz?w=652&h=367);一直以來,性能優化是開發的重中之中,而提及 前端...

    BlackMass 評論0 收藏0
  • 從“雅虎軍規”看性能優化

    摘要:避免重定向重定向用和狀態碼,下面是一個有狀態碼的頭瀏覽器會自動跳轉到域指明的。除此之外還有別的跳轉方式元標簽和,但如果你必須得做重定向,最好用標準的狀態碼,主要是為了讓返回按鈕能正常使用。要提高性能,優化這些響應至關重要。 showImg(https://segmentfault.com/img/bVbmMsz?w=652&h=367);一直以來,性能優化是開發的重中之中,而提及 前端...

    Kyxy 評論0 收藏0

發表評論

0條評論

zeyu

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<