Java源码学习02-异常的定义,使用,处理

异常的顶层父类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 {

}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值