异常的顶层父类Throwable:继承它后,查看内部的方法.包括
package learn.error;
import java.io.Serializable;
import java.util.Objects;
/**
* Throwable异常处理顶层父类:继承该类的有Error编译异常,Exception运行时异常. <br>
* 方法会操作堆栈.我们这里继承Throwable,介绍Throwable中的方法
*
* @author Administrator
*
*/
public class MyThrowable extends Throwable implements Serializable {
private static final long serialVersionUID = 1L;
/** 异常的详细信息 */
private String detailMessage = "详细信息";
/** 异常的原因 */
private Throwable cause = this;
/**
* 获取异常的详细信息
*/
@Override
public String getMessage() {
return detailMessage;
}
/**
* 获取本地化消息
*/
@Override
public String getLocalizedMessage() {
return getMessage();
}
/**
* 获取异常原因
*/
@Override
public synchronized Throwable getCause() {
return (cause == this ? null : cause);
}
/**
* 初始化异常原因
*/
@Override
public synchronized Throwable initCause(Throwable cause) {
if (this.cause != this)
throw new IllegalStateException("无法覆盖原因 " + Objects.toString(cause, "为null"), this);
if (cause == this)
throw new IllegalArgumentException("不允许自相矛盾", this);
this.cause = cause;
return this;
}
@Override
public String toString() {
String s = getClass().getName();
String message = getLocalizedMessage();
return (message != null) ? (s + ": " + message) : s;
}
/**
* System.err打印错误信息
*/
@Override
public void printStackTrace() {
printStackTrace(System.err);
}
// 其他一些操作堆栈的方法就不显示了
}
而Error中都是一些无参有参构造函数.
public MyError() {
super();
}
public MyError(String message) {
super(message);
}
public MyError(String message, Throwable cause) {
super(message, cause);
}
public MyError(Throwable cause) {
super(cause);
}
protected MyError(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}
}
public class MyException extends Exception {
static final long serialVersionUID = -3387516993124229948L;
public MyException() {
super();
}
public MyException(String message) {
super(message);
}
public MyException(String message, Throwable cause) {
super(message, cause);
}
public MyException(Throwable cause) {
super(cause);
}
}
而继承这两类编译异常,运行时异常的下级异常类,基本都是调用这两个类里的方法来输出异常信息或自定义信息.目的是调用最顶层Throwable来操作堆栈和打印输出异常信息.
而Error和Exception类下面的不同子类也是为了区分不同的异常类型与打印信息,便于编程开发人员能快速定位异常出现的原因.
以上概念了解了就可以定义自己的异常处理类来处理异常了.
你可以根据Exception类中的方法仿照这写一个自己的异常类需要 继承 Exception. 我上面的就是自定义的异常类.当使用时将处理异常的类选中自定义的即可. eg: throw new MyException("XXX出错了!");
对异常的处理通常有两种方法 try catch 捕获或者 throw 一个异常类往上抛出
try {
throw new IllegalAccessError("调用已有异常类并抛出异常");
} catch (Exception e) {
e.printStackTrace();
System.out.println("try catch异常打印处理或打印到日志log中,或调用自己的异常处理类都需");
} finally {
}