JDK中的Exception
1. Throwable
- 三个重要属性
Throwable cause; //getCause的返回,异常的起因
String detailMessage; //getMessage()的返回信息, 初始化值为null, 如果不继承异常体系就是null
StackTraceElement[] stackTrace; //报错的调用方法栈信息
- 构造方法
public Throwable(String message) {
fillInStackTrace(); //充填调用方法栈信息
detailMessage = message;//报错的提示信息
}
public Throwable(String message, Throwable cause) {
fillInStackTrace();//充填调用方法栈信息
detailMessage = message;//报错的提示信息
this.cause = cause;//异常的起因
}
public Throwable(Throwable cause) {
fillInStackTrace();//充填调用方法栈信息
detailMessage = (cause==null ? null : cause.toString());//报错的提示信息
this.cause = cause;//异常的起因
}
protected Throwable(String message, Throwable cause,boolean enableSuppression,
boolean writableStackTrace) {
if (writableStackTrace) {
fillInStackTrace();//充填调用方法栈信息
} else {
stackTrace = null;
}
detailMessage = message;//报错的提示信息
this.cause = cause;//异常的起因
if (!enableSuppression)
suppressedExceptions = null;
}
- 常用方法
//日志里的异常输出格式,如果message没有初始化就是null
public String toString() {
String s = getClass().getName();
String message = getLocalizedMessage();
return (message != null) ? (s + ": " + message) : s;
}
//打印到控制台,所以禁用
public void printStackTrace() {
printStackTrace(System.err);
}
//获取异常的调用方法栈
public StackTraceElement[] getStackTrace() {
return getOurStackTrace().clone();
}
//获取异常起因
public synchronized Throwable getCause() {
return (cause==this ? null : cause);
}
//获取异常提示信息,注意可能会override该方法
public String getMessage() {
return detailMessage;
}
2. Exception
直接继承Throwable的构造方法
public class Exception extends Throwable {
static final long serialVersionUID = -3387516993124229948L;
public Exception() {
super();
}
public Exception(String message) {
super(message);
}
public Exception(String message, Throwable cause) {
super(message, cause);
}
public Exception(Throwable cause) {
super(cause);
}
protected Exception(String message, Throwable cause,
boolean enableSuppression,
boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
3. RuntimeException
间接继承Throwable的构造方法
public class RuntimeException extends Exception {
static final long serialVersionUID = -7034897190745766939L;
public RuntimeException() {
super();
}
public RuntimeException(String message) {
super(message);
}
public RuntimeException(String message, Throwable cause) {
super(message, cause);
}
public RuntimeException(Throwable cause) {
super(cause);
}
protected RuntimeException(String message, Throwable cause,
boolean enableSuppression,
boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
4. 自定义异常
建议也复用Throwable的构造方法, 其他的属性可自定义, 建议不要覆盖toString方法, 注意getMessage方法是否覆盖
public class TException extends Exception {
private static final long serialVersionUID = 1L;
public TException() {
super();
}
public TException(String message) {
super(message);
}
public TException(Throwable cause) {
super(cause);
}
public TException(String message, Throwable cause) {
super(message, cause);
}
}