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);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值