<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 九、異常約定 1. 【<font color=red>強制</font>】Java 類庫中定義的一類 RuntimeException 可以通過預先檢查進行規避,而不應該通過 catch 來處理,比如:IndexOutOfBoundsException,NullPointerException 等等。 > 說明:無法通過預檢查的異常除外,如在解析一個外部傳來的字符串形式數字時,通過 catch NumberFormatException 來實現。 正例:if (obj != null) {...} 反例:try { obj.method() } catch (NullPointerException e) {...} 2. 【<font color=red>強制</font>】異常不要用來做流程控制,條件控制,因為異常的處理效率比條件分支低。 3. 【<font color=red>強制</font>】對大段代碼進行 try-catch,這是不負責任的表現。catch 時請分清穩定代碼和非穩 定代碼,穩定代碼指的是無論如何不會出錯的代碼。對于非穩定代碼的 catch 盡可能進行區分 異常類型,再做對應的異常處理。 4. 【<font color=red>強制</font>】捕獲異常是為了處理它,不要捕獲了卻什么都不處理而拋棄之,如果不想處理它,請 將該異常拋給它的調用者。最外層的業務使用者,必須處理異常,將其轉化為用戶可以理解的 內容。 5. 【<font color=red>強制</font>】有 try 塊放到了事務代碼中,catch 異常后,如果需要回滾事務,一定要注意手動回 滾事務。 6. 【<font color=red>強制</font>】finally 塊必須對資源對象、流對象進行關閉,有異常也要做 try-catch。 > 說明:如果 JDK7 及以上,可以使用 try-with-resources 方式。 7. 【<font color=red>強制</font>】不能在 finally 塊中使用 return,finally 塊中的 return 返回后方法結束執行,不 會再執行 try 塊中的 return 語句。 8. 【<font color=red>強制</font>】捕獲異常與拋異常,必須是完全匹配,或者捕獲異常是拋異常的父類。 > 說明:如果預期對方拋的是繡球,實際接到的是鉛球,就會產生意外情況。 9. 【推薦】方法的返回值可以為 null,不強制返回空集合,或者空對象等,必須添加注釋充分 說明什么情況下會返回 null 值。調用方需要進行 null 判斷防止 NPE 問題。 > 說明:本規約明確防止 NPE 是調用者的責任。即使被調用方法返回空集合或者空對象,對調用 者來說,也并非高枕無憂,必須考慮到遠程調用失敗,運行時異常等場景返回 null 的情況。 10. 【推薦】防止 NPE,是程序員的基本修養,注意 NPE 產生的場景: > 1) 返回類型為包裝數據類型,有可能是 null,返回 int 值時注意判空。 反例:public int f() { return Integer 對象}; 如果為 null,自動解箱拋 NPE。 2) 數據庫的查詢結果可能為 null。 3) 集合里的元素即使 isNotEmpty,取出的數據元素也可能為 null。 4) 遠程調用返回對象,一律要求進行 NPE 判斷。 5) 對于 Session 中獲取的數據,建議 NPE 檢查,避免空指針。 6) 級聯調用 obj.getA().getB().getC();一連串調用,易產生 NPE。 正例:可以使用 JDK8 的 Optional 類來防止 NPE 問題。 11. 【推薦】在代碼中使用“拋異常”還是“返回錯誤碼”,對于公司外的 http/api 開放接口必須 使用“錯誤碼”;而應用內部推薦異常拋出;跨應用間 RPC 調用優先考慮使用 Result 方式,封 裝 isSuccess、“錯誤碼”、“錯誤簡短信息”。 > 說明:關于 RPC 方法返回方式使用 Result 方式的理由: 1)使用拋異常返回方式,調用方如果沒有捕獲到就會產生運行時錯誤。 2)如果不加棧信息,只是 new 自定義異常,加入自己的理解的 error message,對于調用 端解決問題的幫助不會太多。如果加了棧信息,在頻繁調用出錯的情況下,數據序列化和傳輸 的性能損耗也是問題。 12. 【推薦】定義時區分 unchecked / checked 異常,避免直接使用 RuntimeException 拋出, 更不允許拋出 Exception 或者 Throwable,應使用有業務含義的自定義異常。推薦業界已定義 過的自定義異常,如:DAOException / ServiceException 等。 13. 【參考】避免出現重復的代碼(Don’t Repeat Yourself),即 DRY 原則。 > 說明:隨意復制和粘貼代碼,必然會導致代碼的重復,在以后需要修改時,需要修改所有的副 本,容易遺漏。必要時抽取共性方法,或者抽象公共類,甚至是共用模塊。 正例:一個類中有多個 public 方法,都需要進行數行相同的參數校驗操作,這個時候請抽取: private boolean checkParam(DTO dto) {...}
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看