學習阿里巴巴開發手冊-8

1.Java類庫中定義的一類RuntimeException可以通過預先檢查進行規避,不應該通過catch來處理,比如空指針異常,數組邊界越界異常等。

2.異常不要用來做流程控制,條件控制。因爲異常的處理效率比條件還要低

3.對大段代碼進行try-catch是不負責的,需要區分穩定代碼和非穩定代碼,對非穩定代碼的catch儘量區分異常類型,在做對應的異常處理

4.捕獲異常是爲了處理它,不要捕獲了卻什麼也不處理而拋棄之,如果不想處理,將異常拋給它的調用者,業務使用者,必須處理異常,將其轉化爲用可以理解的內容

5.try塊放到了事務代碼中,catch異常後,如果需要回滾,一定要手動回滾事務。

6.finally塊必須對資源對象、流對象進行關閉。

7.不能在finally塊中使用return,因爲finally塊中return之後方法結束執行,不會再執行try塊中的return語句

8.捕獲異常和拋異常必須是完全匹配,或者是捕獲異常是拋異常的父類。

9.方法的返回值可以爲null,不強制返回空集合,或者空對象等,必須添加註釋說明什麼情況下會返回null值,調用方需要進行null判斷防止NPE問題

   必須考慮到遠程調用失敗、序列化失敗、運行時異常時返回null情況。

10.防止NPE,注意NPE產生的場景

    1)返回類型爲基本數據類型,return包裝數據類型的對象時,自動拆箱有可能產生。

    2)數據庫查詢結果可能爲null

    3)集合裏的元素即使isNotEmpty,取出的數據元素也可能爲null

    4)遠程調用返回的對象,一律要求進行空指針判斷,防止NPE

    5)對於Session中獲取的數據,建議NPE檢查,避免空指針

    6)級聯調用obj.getA().getB().getC();一連串調用,易產生NPE

11.定義時區分unchecked/check異常,避免直接拋出 newRuntimeException(),更不允許拋出Exception或者Throwable,應使用有業務含義的自定義異常。(DAOException,ServiceException).

12.對於公司外的http/api開放接口必須使用“錯誤碼”;而應用內部推薦異常拋出;跨應用間RPC調用優先考慮使用Result方式,封裝isSuccess()方法、錯誤碼、錯誤簡短信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章