Exception类源码剖析

Error与Exception类源码剖析

一、Error类的简介

ErrorThrowable的子类,它表示合理的应用程序不应尝试捕获的严重问题。大多数此类错误都是异常情况。ThreadDeath错误虽然是“正常”情况,但也是Error的子类,因为大多数应用程序不应尝试捕获它。
方法不需要在其throws子句中声明在方法执行期间可能抛出但未被捕获的任何Error子类,因为这些错误是永远不应该发生的异常情况。也就是说,Error及其子类被视为非检查时异常,以便进行异常的编译时检查。image-20230920161132802

二、Exception类的简介

Exception类及其子类是Throwable的一种实现形式,表示合理的应用程序可能想要捕获的条件。
Exception类以及任何不是RuntimeException子类的子类都是检查时异常。如果检查时异常可以由方法或构造函数的执行引发并传播到方法或构造函数边界之外,则需要在方法或构造函数的throws子句中声明这些异常。

image-20230920161440710

三、Error类的构造方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public Error() {
super();
}

public Error(String message) {
super(message);
}

public Error(String message, Throwable cause) {
super(message, cause);
}

public Error(Throwable cause) {
super(cause);
}
protected Error(String message, Throwable cause,
boolean enableSuppression,
boolean writableStackTrace) {
super(message, cause, enableSuppression, writableStackTrace);
}

  1. 构造一个新Error,并将null作为其详细消息。cause未初始化,随后可以通过调用initCause来初始化。
  2. 使用指定的详细消息构造一个新Error。cause未初始化,随后可以通过调用initCause来初始化。
  3. 使用指定的详细消息和原因构造一个新Error。请注意,与原因cause相关的详细消息不会自动合并到此Error的详细消息中。
  4. 使用指定的原因和(cause==null ? null : Cause.toString())的详细消息构造一个新Error(通常包含原因的类和详细消息)。这个构造函数对于那些只不过是其他Throwable的包装器的Error很有用。
  5. 使用指定的详细消息、原因、启用或禁用的抑制以及启用或禁用的可写堆栈跟踪构造一个新Error。

四、Exception类的构造方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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);
}
  1. 构造一个新Exception,并将null作为其详细消息。cause未初始化,随后可以通过调用initCause来初始化。
  2. 使用指定的详细消息构造一个新Exception。cause未初始化,随后可以通过调用initCause来初始化。
  3. 使用指定的详细消息和原因构造一个新Exception。请注意,与原因cause相关的详细消息不会自动合并到此Exception的详细消息中。
  4. 使用指定的原因和(cause==null ? null : Cause.toString())的详细消息构造一个新Exception(通常包含原因的类和详细消息)。这个构造函数对于那些只不过是其他Throwable的包装器的Exception很有用。
  5. 使用指定的详细消息、原因、启用或禁用的抑制以及启用或禁用的可写堆栈跟踪构造一个新Exception。

五、总结

Error和Exception类作为Throwable的两个直接子类,都只有五个构造方法(最终还是调用Throwable的相应构造方法),其他方法一丝不动的直接继承Throwable类,因此实际的实现体需要到Throwable类中查看。