Java自定义Exception
國內私募機構九鼎控股打造APP,來就送?20元現(xiàn)金領取地址:http://jdb.jiudingcapital.com/phone.html
內部邀請碼:C8E245J?(不寫邀請碼,沒有現(xiàn)金送)
國內私募機構九鼎控股打造,九鼎投資是在全國股份轉讓系統(tǒng)掛牌的公眾公司,股票代碼為430719,為“中國PE第一股”,市值超1000億元。?
------------------------------------------------------------------------------------------------------------------------------------------------------------------
?
原文地址:http://my.oschina.net/liuzeli/blog/351280
這里總結一下Java的Exception,并實現(xiàn)一個自定義Exception類。
總結:
- 為可恢復的錯誤使用檢查型異常,為編程錯誤使用非檢查型錯誤。
- 在finally程序塊中關閉或者釋放資源
- 在堆棧跟蹤中包含引起異常的原因
- 始終提供關于異常的有意義的完整的信
- 避免過度使用檢查型異常
- 將檢查型異常轉為運行時異常
- 記住對性能而言,異常代價高昂
- 避免catch塊為空
- 使用標準異常
- 記錄任何方法拋出的異常
- 受檢查異常需要自行處理,運行時異常不需要
- 受檢查異常是Exception直接子類,運行時異常是RuntimeException的子類
- 受檢查異常多是編程時出現(xiàn)的錯誤,運行時異常是程序運行時故障率較高
- 用已知的字符串對象調用equals()和equalsIgnoreCase()方法【"hello".equals(objString)】;
- 如果valueOf()和toString()方法的返回值一樣的話,用valueOf()方法代替toString()方法【當為null的對象調用toString()方法時會拋出NullPointerException異常而調用valueOf()方法時會返回一個"null"的封裝類】;
- 使用對null安全的方法和庫【eg, StringUtils.isBlank(), isNumeric(), isWhiteSpace()等】;
- 方法調用的返回值用返回空的集合或者空的數(shù)組避免返回null的情況【Collections.EMPTY_LIST, Collections.EMPTY_SET和Collections.EMPTY_MAP等】;
- 使用@NotNull和@Nullable的注解明確指出是否可能有null的情況出現(xiàn);
- 避免代碼中出現(xiàn)不必要的自動裝箱和拆箱【避免類似的int a 出現(xiàn)接收返回值為null的情況,用Integer a代替更好】;
- 遵守契約并且使用合理的默認值【通過定義什么可以為空,什么不能為空,主叫方可以明確的作出判斷。】;
- 在使用數(shù)據(jù)庫存儲對象時,要定義是否允許某個字段為空,這樣數(shù)據(jù)庫自身機制可以檢查是否為空的情況,避免程序調用后出現(xiàn)非法的空字段。
- 使用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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [ruby on rails] 跟我学之
- 下一篇: Acdream1157---Segmen