|
|||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang
类 Throwable
java.lang.Object java.lang.Throwable
- 所有已实现的接口:
- Serializable
-
public class Throwable
- extends Object
- implements Serializable
Throwable
类是 Java 语言中所有错误或异常的超类。只有当对象是此类(或其子类之一)的实例时,才能通过 Java 虚拟机或者 Java throw
语句抛出。类似地,只有此类或其子类之一才可以是 catch
子句中的参数类型。
两个子类的实例,Error
和 Exception
,通常用于指示发生了异常情况。通常,这些实例是在异常情况的上下文中新近创建的,因此包含了相关的信息(比如堆栈跟踪数据)。
Throwable 包含了其线程创建时线程执行堆栈的快照。它还包含了给出有关错误更多信息的消息字符串。最后,它还可以包含 cause(原因):另一个导致此 throwable 抛出的 throwable。此 cause 设施在 1.4 版本中首次出现。它也称为异常链 设施,因为 cause 自身也会有 cause,依此类推,就形成了异常链,每个异常都是由另一个异常引起的。
导致 throwable cause 的一个理由是,抛出它的类构建在低层抽象之中,而高层操作由于低层操作的失败而失败。让低层抛出的 throwable 向外传播是一种糟糕的设计方法,因为它通常与高层提供的抽象不相关。此外,这样做将高层 API 与其实现细节关联起来,假定低层异常是经过检查的异常。抛出“经过包装的异常”(即包含 cause 的异常)允许高层与其调用方交流失败详细信息,而不会招致上述任何一个缺点。这种方式保留了改变高层实现而不改变其 API 的灵活性(尤其是,异常集合通过其方法抛出)。
导致 throwable cause 的另一个 cause 是,抛出它的方法必须符合通用接口,而通用接口不允许方法直接抛出 cause。例如,假定持久集合符合 Collection
接口,而其持久性在 java.io 的基础上实现。假定 put 方法的内部可以抛出 IOException
。实现可以与其调用方交流 IOException 的详细消息,同时通过以一种合适的未检查的异常来包装 IOException,使其符合 Collection 接口。(持久集合的规范应该指示它能够抛出这种异常。)
Cause 可以通过两种方式与 throwable 关联起来:通过一个将 cause 看作参数的构造方法;或者通过 initCause(Throwable)
方法。对于那些希望将 cause 与其关联起来的新 throwable 类,应该提供带有 cause 的构造方法,并委托(可能间接)给一个带有 cause 的 Throwable 构造方法。例如:
try { lowLevelOp(); } catch (LowLevelException le) { throw new HighLevelException(le); // Chaining-aware constructor }因为 initCause 方法是公共的,它允许 cause 与任何 throwable 相关联,甚至包括“遗留 throwable”,它的实现提前将异常链机制的附件应用到 Throwable。例如:
try { lowLevelOp(); } catch (LowLevelException le) { throw (HighLevelException) new HighLevelException().initCause(le); // Legacy constructor }
在版本 1.4 之前,许多 throwable 有自己的非标准异常链机制( ExceptionInInitializerError
、 ClassNotFoundException
、 UndeclaredThrowableException
、 InvocationTargetException
、 WriteAbortedException
、 PrivilegedActionException
、 PrinterIOException
、 RemoteException
和 NamingException
)。所有这些 throwable 都已经更新过,可以使用标准异常链机制,同时继续实现其“遗留”链机制,以保持兼容性。
此外,从版本 1.4 开始,许多通用的 Throwable 类(例如,Exception
、RuntimeException
、Error
)都已经更新,具有带 cause 的构造方法。由于有 initCause 方法存在,这不是严格要求的,但它更方便,也更形象地委托给一个带有 cause 的构造方法。
根据惯例,Throwable
类及其子类有两个构造方法,一个不带参数,另一个带有 String
参数,此参数可用于生成详细消息。此外,这些子类很可能有与其相关联的 cause,因此也应有两个构造方法,一个带 Throwable
(cause),一个带 String
(详细消息)和 Throwable
(cause)。
在版本 1.4 中还引入了 getStackTrace()
方法,它允许通过各种形式的 printStackTrace()
方法编程访问堆栈跟踪信息,这些信息以前只能以文本形式使用。此信息已经添加到该类的序列化表示形式,因此 getStackTrace 和 printStackTrace 将可在反序列化时获得的 throwable 上正确操作。
- 从以下版本开始:
- JDK1.0
- 另请参见:
- 序列化表格
构造方法摘要 | |
---|---|
Throwable() 构造一个将 null 作为其详细消息的新 throwable。 |
|
Throwable(String message) 构造带指定详细消息的新 throwable。 |
|
Throwable(String message, Throwable cause) 构造一个带指定详细消息和 cause 的新 throwable。 |
|
Throwable(Throwable cause) 构造一个带指定 cause 和 (cause==null ? null :cause.toString())(它通常包含类和 cause 的详细消息)的详细消息的新 throwable。 |
方法摘要 | |
---|---|
Throwable |
fillInStackTrace() 在异常堆栈跟踪中填充。 |
Throwable |
getCause() 返回此 throwable 的 cause;如果 cause 不存在或未知,则返回 null 。 |
String |
getLocalizedMessage() 创建此 throwable 的本地化描述。 |
String |
getMessage() 返回此 throwable 的详细消息字符串。 |
StackTraceElement[] |
getStackTrace() 提供编程访问由 printStackTrace() 输出的堆栈跟踪信息。 |
Throwable |
initCause(Throwable cause) 将此 throwable 的 cause 初始化为指定值。 |
void |
printStackTrace() 将此 throwable 及其追踪输出至标准错误流。 |
void |
printStackTrace(PrintStream s) 将此 throwable 及其追踪输出到指定的输出流。 |
void |
printStackTrace(PrintWriter s) 将此 throwable 及其追踪输出到指定的 PrintWriter。 |
void |
setStackTrace(StackTraceElement[] stackTrace) 设置将由 getStackTrace() 返回,并由 printStackTrace() 和相关方法输出的堆栈跟踪元素。 |
String |
toString() 返回此 throwable 的简短描述。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
构造方法详细信息 |
---|
Throwable
public Throwable()
-
构造一个将
null
作为其详细消息的新 throwable。Cause 尚未进行初始化,可在以后通过调用initCause(java.lang.Throwable)
来初始化。调用
fillInStackTrace()
方法来初始化新创建的 throwable 中的堆栈跟踪数据。
Throwable
public Throwable(String message)
-
构造带指定详细消息的新 throwable。Cause 尚未进行初始化,可在以后通过调用
initCause(java.lang.Throwable)
来初始化。调用
fillInStackTrace()
方法来初始化新创建的 throwable 中的堆栈跟踪数据。- 参数:
-
message
- 详细消息。保存这个详细消息,以便以后通过getMessage()
方法对其进行检索。
Throwable
public Throwable(String message, Throwable cause)
-
构造一个带指定详细消息和 cause 的新 throwable。
注意,与
cause
相关的详细消息不是 自动合并到这个 throwable 的详细消息中的。调用
fillInStackTrace()
方法来初始化新创建的 throwable 中的堆栈跟踪数据。- 参数:
-
message
- 详细消息(保存此消息,以便以后通过getMessage()
方法检索它)。 -
cause
- 原因(保存此 cause,以便以后通过getCause()
方法检索它)。(允许 null 值,指出 cause 是不存在的或是未知的。) - 从以下版本开始:
- 1.4
Throwable
public Throwable(Throwable cause)
-
构造一个带指定 cause 和 (cause==null ? null :cause.toString())(它通常包含类和 cause 的详细消息)的详细消息的新 throwable。此构造方法对于那些与其他 throwable(例如,
PrivilegedActionException
)的包装器相同的 throwable 来说是有用的。调用
fillInStackTrace()
方法来初始化新创建的 throwable 中的堆栈跟踪数据。- 参数:
-
cause
- 原因(保存此 cause,以便以后通过getCause()
方法检索它)。(允许 null 值,指出 cause 是不存在的或是未知的。) - 从以下版本开始:
- 1.4
方法详细信息 |
---|
getMessage
public String getMessage()
- 返回此 throwable 的详细消息字符串。
-
-
- 返回:
- 此 Throwable 实例(可以为 null)的详细消息字符串。
getLocalizedMessage
public String getLocalizedMessage()
-
创建此 throwable 的本地化描述。子类可以重写此方法,以便生成特定于语言环境的消息。对于不重写此方法的子类,默认实现返回与
getMessage()
相同的结果。 -
-
- 返回:
- 此 throwable 的本地化描述。
- 从以下版本开始:
- JDK1.1
getCause
public Throwable getCause()
-
返回此 throwable 的 cause;如果 cause 不存在或未知,则返回
null
。(该 Cause 是导致抛出此 throwable 的throwable。)此实现返回由一个需要 Throwable 的构造方法提供的 cause,或者在创建之后通过
initCause(Throwable)
方法进行设置的 cause。虽然通常不需要重写此方法,但子类可以重写它,以返回一个通过某些其他方式设置的 cause。这适用于在异常链(异常嵌套)机制被加入到 Throwable 之前存在“遗留 Throwable 链机制”的情况。注意,不必 重写任何 PrintStackTrace 方法,所有方法都调用 getCause 方法来确定 throwable 的 cause。 -
-
- 返回:
-
此 throwable 的 cause,如果 cause 不存在或是未知的,则返回
null
。 - 从以下版本开始:
- 1.4
initCause
public Throwable initCause(Throwable cause)
-
将此 throwable 的 cause 初始化为指定值。(该 Cause 是导致抛出此 throwable 的throwable。)
此方法至多可以调用一次。此方法通常从构造方法中调用,或者在创建 throwable 后立即调用。如果此 throwable 通过
Throwable(Throwable)
或Throwable(String,Throwable)
创建,此方法甚至一次也不能调用。 -
-
- 参数:
-
cause
- 原因(保存此 cause,以便以后通过getCause()
方法检索它)。(允许 null 值,指出 cause 是不存在的或是未知的。) - 返回:
-
对此
Throwable
实例的引用。 - 抛出:
-
IllegalArgumentException
- 如果cause
是此 throwable。(throwable 不能是它自己的 cause。) -
IllegalStateException
- 如果此 throwable 通过Throwable(Throwable)
或Throwable(String,Throwable)
创建,或者此方法已经在此 throwable 上进行调用。 - 从以下版本开始:
- 1.4