首先來看異常的根節點java
Throwable是全部異常的根,java.lang.Throwable
Error是錯誤,java.lang.Error
Error類體系描述了Java運行系統中的內部錯誤以及資源耗盡的情形.這種異常會致使JVM中斷,必須人爲處理
java虛擬機中發生的,不須要程序猿try-catch或者拋出
StackOutFlowError(棧溢出)和OutOfMemoryError(堆溢出),都屬於Error,中間層是VirtualMachineError
Exception是異常,java.lang.Exception 繼承 Throwable
IOException(必須捕獲異常)
FileNotFoundException
EOFException
RuntimeException(可捕獲異常)
NullPointerException
ClassNotFoundException
...app
自定異常this
public class TraceException extends RuntimeException{ private ExceptionEnums exceptionEnums; public TraceException(ExceptionEnums exceptionEnums) { super(exceptionEnums.getMessage()); this.exceptionEnums = exceptionEnums; } public static String getTraceInfo(Throwable t) { StringWriter stringWriter= new StringWriter(); PrintWriter writer= new PrintWriter(stringWriter); t.printStackTrace(writer); StringBuffer buffer= stringWriter.getBuffer(); String[] str = buffer.toString().split("\\r\\n\\t"); buffer = new StringBuffer(); buffer.append("exception:").append(str[0]).append("\tdetail:").append(str[1]); writer.close(); return buffer.toString(); } }
自定義返回信息code
public enum ExceptionEnums { COMMON_EXP("5000", "系統異常"), NOT_FOUND_DATA_EXP("1001", "未找到數據") ; private String code; private String message; ExceptionEnums(String code, String message) { this.code = code; this.message = message; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
運行查看blog
public class ClientExcetion { public static void main(String[] args) { try { getData(); }catch (TraceException e){ System.out.println(e.getMessage()); } } public static void getData() { try { String[] a = {}; String c = a[3]; System.out.println(c); }catch (Exception e){ System.out.println(TraceException.getTraceInfo(e)); throw new TraceException(ExceptionEnums.COMMON_EXP); } } }