日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java自定义Exception

發布時間:2025/3/14 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java自定义Exception 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

國內私募機構九鼎控股打造APP,來就送?20元現金領取地址:http://jdb.jiudingcapital.com/phone.html
內部邀請碼:C8E245J?(不寫邀請碼,沒有現金送)
國內私募機構九鼎控股打造,九鼎投資是在全國股份轉讓系統掛牌的公眾公司,股票代碼為430719,為中國PE第一股,市值超1000億元。?

------------------------------------------------------------------------------------------------------------------------------------------------------------------

?

原文地址:http://my.oschina.net/liuzeli/blog/351280

這里總結一下Java的Exception,并實現一個自定義Exception類。

總結:

  • Throwable對象分為兩種類型:Error(表示編譯時和系統錯誤);Exception(在Java類庫、用戶方法以及運行時故障中拋出的異常)。
  • Exception細分成兩種異常:受檢查異常(如,IOException, SQLException等。在編譯時要被強制檢查的異常,需要用try, catch, finally關鍵字在編譯時期處理,否則會報錯。);運行時異常(如,ArithmeticException, ClassCastException, IllegalArgumentException, IndexOutOfBoundsException, NullPointerException等。編譯器不會檢查這類異常。)
  • Java編程中處理異常的最佳實踐[4]:
    • 為可恢復的錯誤使用檢查型異常,為編程錯誤使用非檢查型錯誤。
    • 在finally程序塊中關閉或者釋放資源
    • 在堆棧跟蹤中包含引起異常的原因
    • 始終提供關于異常的有意義的完整的信
    • 避免過度使用檢查型異常
    • 將檢查型異常轉為運行時異常
    • 記住對性能而言,異常代價高昂
    • 避免catch塊為空
    • 使用標準異常
    • 記錄任何方法拋出的異常
    受檢查異常和運行時異常的區別:
    • 受檢查異常需要自行處理,運行時異常不需要
    • 受檢查異常是Exception直接子類,運行時異常是RuntimeException的子類
    • 受檢查異常多是編程時出現的錯誤,運行時異常是程序運行時故障率較高
    避免出現NullPointerException的最佳實踐[5]:
    • 用已知的字符串對象調用equals()和equalsIgnoreCase()方法【"hello".equals(objString)】;
    • 如果valueOf()和toString()方法的返回值一樣的話,用valueOf()方法代替toString()方法【當為null的對象調用toString()方法時會拋出NullPointerException異常而調用valueOf()方法時會返回一個"null"的封裝類】;
    • 使用對null安全的方法和庫【eg, StringUtils.isBlank(), isNumeric(), isWhiteSpace()等】;
    • 方法調用的返回值用返回空的集合或者空的數組避免返回null的情況【Collections.EMPTY_LIST, Collections.EMPTY_SET和Collections.EMPTY_MAP等】;
    • 使用@NotNull和@Nullable的注解明確指出是否可能有null的情況出現;
    • 避免代碼中出現不必要的自動裝箱和拆箱【避免類似的int a 出現接收返回值為null的情況,用Integer a代替更好】;
    • 遵守契約并且使用合理的默認值【通過定義什么可以為空,什么不能為空,主叫方可以明確的作出判斷。】;
    • 在使用數據庫存儲對象時,要定義是否允許某個字段為空,這樣數據庫自身機制可以檢查是否為空的情況,避免程序調用后出現非法的空字段。
    • 使用null的封裝對象Null類。

    自定義一個Exception類:

    ProjectNameException.java 內容如下:

    ?
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 package com.trianlge23.projectname.exception; public class ProjectNameException extends Throwable { ????private static final long serialVersionUID = 8093803025939797139L; ????//exception code ????private int exceptionCode; ????//exception detailed message ????private String detailMsg; ????public ProjectNameException(int exceptionCode, String extraMsg) { ????????super(); ????????this.setDetailMsg(exceptionCode); ????????this.setExtraMsg(extraMsg); ????} ????public ProjectNameException(int exceptionCode) { ????????super(); ????????this.setDetailMsg(exceptionCode); ????} ????//notice: we do not offer the set method to set the excption code. ????public int getExceptionCode() { ????????return exceptionCode; ????} ????//if there has no extra message for this excption code, init it. ????private void setDetailMsg(int exceptionCode) { ????????this.exceptionCode = exceptionCode; ????????if (ProjectNameExceptionCode.EXCEPTION_CODE_MAP ????????????????.containsKey(exceptionCode)) { ????????????this.detailMsg = ProjectNameExceptionCode.EXCEPTION_CODE_MAP ????????????????????.get(exceptionCode); ????????} else { ????????????this.detailMsg = ProjectNameExceptionCode.EXCEPTION_CODE_MAP ????????????????????.get(ProjectNameExceptionCode.PROJECTNAME_EXCEPTION_CODE_NOT_FOUND); ????????} ????} ????//if there has extra message for this exception code, add it. ????private void setExtraMsg(String extraMsg) { ????????this.detailMsg += ProjectNameExceptionCode.EXTRA_EXCEPTION_MSG_SPLITER ????????????????+ extraMsg; ????} ????//override the super class method getMessage() ????@Override ????public String getMessage() { ????????return this.detailMsg; ????} }

    ?

    ProjectNameExceptionCode.java內容如下:

    ?
    1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 package com.triangle23.projectname.exception; import java.util.HashMap; import java.util.Map; public class ProjectNameExceptionCode { ????//the separator between default message and extra message of exception. ????public static final String EXTRA_EXCEPTION_MSG_SPLITER = ": "; ????//the map stores the exception code and exception message ????public static Map<Integer, String> EXCEPTION_CODE_MAP; ????public static final int PROJECTNAME_EXCEPTION_CODE_NOT_FOUND = 1; ????static { ????????EXCEPTION_CODE_MAP = new HashMap<Integer, String>(); ????????EXCEPTION_CODE_MAP.put(PROJECTNAME_EXCEPTION_CODE_NOT_FOUND, ????????????????"[PROJECTNAME Exception] Not found exception code."); ????} }

    ?

    ?

    參考資料:

    1. JDK1.7 API:http://docs.oracle.com/javase/7/docs/api/

    2. Java編程思想(第四版)

    3. Effective Java

    4. Exception Handling Java Best Practices:?
    http://javarevisited.blogspot.com/2013/03/0-exception-handling-best-practices-in-Java-Programming.html

    5. Java Tips and Best practices to avoid NullPointerException:?
    http://javarevisited.blogspot.com/2013/05/java-tips-and-best-practices-to-avoid-nullpointerexception-program-application.html

    轉載于:https://www.cnblogs.com/AloneSword/p/4142049.html

    總結

    以上是生活随笔為你收集整理的Java自定义Exception的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。