public class Throwable extends Object implements Serializable
Throwable
类是java语言中的所有错误和异常的基类。只有在这个类的实例对象(或其子类)由java虚拟机或者可以通过java
throw
声明抛出。同样的,这类只或它的一个子类可以在
catch
条款参数类型。为了编译时检查异常,
Throwable
和任何子类
Throwable
也没有任何
RuntimeException
或
Error
子类作为检查的异常。
两子类的实例,Error
和异常
,通常用来表示特殊的情况时有发生。通常情况下,这些实例是新创建的上下文中的特殊情况,以便包括相关的信息(如堆栈跟踪数据)。
一个Throwable包含在当时创造了一个快照的线程执行堆栈。它还可以包含一个消息字符串,该字符串提供了关于错误的更多信息。随着时间的推移,一个Throwable可以suppress其他throwables被宣扬。最后,错误也可以包含空原因:另一个错误导致这个异常是构建。这个因果信息的记录,被称为零链式异常设施,作为原因,本身,有一个原因,等等,导致了“链”的例外,每个引起另一个。
一个错误可能导致的原因之一就是,把它建在低层的抽象类,并在上层操作失败,由于在较低层的破坏。它会让时间被下层向外传播坏的设计,因为它通常是由上层提供抽象无关。此外,这样做会配合上层的应用层的接口,其实现的细节,假设较低层的异常是一个检查异常。抛出一个“被包裹的例外”(即,一个包含一个原因的例外)允许上层沟通失败的细节给它的来电者,而不会产生这些缺点。它保留了灵活性,以改变上层的实现,而不改变其的原料药(特别是,它的方法所引发的一组例外)。
第二个原因,时间可能有一个原因是,让它必须符合一个通用接口,不允许的方法把原因直接法。例如,假设一个持续收集符合Collection
接口,和它的持久性是实现在java.io
。假设的add
方法内部可以抛出一个IOException
。实施沟通的IOException
细节给它的调用者,符合Collection
接口用的IOException
在适当的未检查的异常。(持久性集合的规范应表明它能够抛出这些异常。)
原因可以有两种方式:通过与时间相关的构造函数的原因作为一个参数,或通过initCause(Throwable)
方法。新的Throwable类希望允许的原因是与他们应该提供构造函数把原因和代表(可能是间接的)的一个Throwable
构造函数的一个原因。因为initCause
方法是公共的,它可以使任何时间有关,甚至一个“遗产抛出“的实施之前的异常链机制Throwable
添加。
按照惯例,Throwable
类及其子类有两个构造函数,一个不需要参数,以String
参数,可用于生产详细信息。此外,这些类可能有一个原因与他们应该有两个构造函数,一个需要一个Throwable
(的原因),一个以String
(详细信息)和Throwable
(原因)。
Modifier | Constructor and Description |
---|---|
|
Throwable()
构建了一个新的时间与
null 的详细信息。
|
|
Throwable(String message)
构建了一种新的Throwable指定详细信息。
|
|
Throwable(String message, Throwable cause)
构建了一种新的Throwable指定详细信息和原因。
|
protected |
Throwable(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)
构建了一种新的Throwable指定详细信息的,因为,
suppression启用或禁用,启用或禁用写的堆栈跟踪。
|
|
Throwable(Throwable cause)
构建了一个新的时间与指定的原因和
(cause==null ? null : cause.toString()) 详细信息(通常包含
cause 类和详细信息)。
|
Modifier and Type | Method and Description |
---|---|
void |
addSuppressed(Throwable exception)
将指定的异常,抑制为了实现这一例外的例外。
|
Throwable |
fillInStackTrace()
填充执行堆栈跟踪。
|
Throwable |
getCause()
返回此错误或
null 原因如果原因是不存在的或未知的。
|
String |
getLocalizedMessage()
创建一个局部描述这个异常。
|
String |
getMessage()
返回该错误的详细信息的字符串。
|
StackTraceElement[] |
getStackTrace()
提供的堆栈跟踪信息的印刷
printStackTrace() 编程访问。
|
Throwable[] |
getSuppressed()
返回一个数组包含所有被抑制的异常,通常由
try -with-resources声明,为了实现这种例外。
|
Throwable |
initCause(Throwable cause)
初始化这个异常空原因为指定值。
|
void |
printStackTrace()
打印到标准错误流这个异常和回溯。
|
void |
printStackTrace(PrintStream s)
打印该时间和指定的打印流的回溯。
|
void |
printStackTrace(PrintWriter s)
打印该时间和指定的打印作家回溯。
|
void |
setStackTrace(StackTraceElement[] stackTrace)
设置堆栈跟踪的元素将被退回
getStackTrace() 和印刷
printStackTrace() 和相关方法。
|
String |
toString()
返回一个对这个异常的简短描述。
|
public Throwable()
null
的详细信息。原因是没有初始化,初始化,随后可通过调用
initCause(java.lang.Throwable)
。
的fillInStackTrace()
方法来初始化新创建的异常堆栈跟踪数据。
public Throwable(String message)
initCause(java.lang.Throwable)
。
的fillInStackTrace()
方法来初始化新创建的异常堆栈跟踪数据。
message
-详细信息。的详细信息保存为以后的
getMessage()
方法检索。
public Throwable(String message, Throwable cause)
值得注意的是,与cause
详细消息为空不自动纳入这个异常的详细信息。
的fillInStackTrace()
方法来初始化新创建的异常堆栈跟踪数据。
message
的详细信息(这是以后的
getMessage()
方法检索)。
cause
的原因(这是以后的
getCause()
方法检索)。(一
null
值是允许的,并指出原因是不存在的或未知的。)
public Throwable(Throwable cause)
(cause==null ? null : cause.toString())
详细信息(通常包含
cause
类和详细信息)。这个构造函数是有用的throwables,很少超过其他throwables包装(例如,
PrivilegedActionException
)。
的fillInStackTrace()
方法来初始化新创建的异常堆栈跟踪数据。
cause
的原因(这是以后的
getCause()
方法检索)。(一
null
值是允许的,并指出原因是不存在的或未知的。)
protected Throwable(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)
getSuppressed()
该对象将返回一零数组长度和调用
addSuppressed(java.lang.Throwable)
会附加一个例外列表的抑制没有影响。如果写的堆栈跟踪是假的,这个构造函数就不叫
fillInStackTrace()
,一
null
将写入
stackTrace
领域,并随后调用
fillInStackTrace
和
setStackTrace(StackTraceElement[])
不会设置堆栈跟踪。如果写的堆栈跟踪是假的,
getStackTrace()
将返回一零数组长度。
注意,Throwable
其他构造函数处理抑制被启用和堆栈跟踪是可写的。子Throwable
任何条件下抑制是残疾人和文档的情况下,堆栈跟踪不可写文件。禁用抑制只发生在特殊要求存在的特殊情况下,如在低内存情况下使用的虚拟机重用异常对象。的情况下,一个给定的异常对象并反复抓,如实施两个子系统间的控制流,是另一种情况下,不变的Throwable对象将是适当的。
message
-详细信息。
cause
的原因。(一
null
值是允许的,并指出原因是不存在的或未知的。)
enableSuppression
是否抑制是启用或禁用
writableStackTrace
是否应该写入堆栈跟踪
OutOfMemoryError
,
NullPointerException
,
ArithmeticException
public String getMessage()
Throwable
实例的详细信息的字符串(可以
null
)。
public String getLocalizedMessage()
getMessage()
。
public Throwable getCause()
null
原因如果原因是不存在的或未知的。(原因是引起这个异常被抛出,
此实现返回的原因是通过一个需要Throwable
建设者提供,或是与initCause(Throwable)
方法创建后。虽然它通常不需要重写此方法,但子类可以重写它以通过其他方式返回一个原因集。这是适合“遗产锁抛出“在连锁的例外Throwable
此外。注意,它是空的不必须覆盖所有的PrintStackTrace
方法,所有这些调用getCause
方法来确定一个Throwable的原因。
null
原因如果原因是不存在的或未知的。
public Throwable initCause(Throwable cause)
这种方法可以被称为在最一次。它通常被称为在构造函数或后立即创建错误。如果这个异常是Throwable(Throwable)
或Throwable(String,Throwable)
创建,该方法不能被叫做曾经。
使用这种方法的一个遗留Throwable类型不定导致其他支持的一个例子是:
尝试{lowlevelop();} catch(lowlevelexception LE){把(highlevelexception)新的highlevelexception()。initcause(LE);/ /遗留的构造函数})
cause
的原因(这是以后的
getCause()
方法检索)。(一
null
值是允许的,并指出原因是不存在的或未知的。)
Throwable
实例。
IllegalArgumentException
-如果
cause
是这个异常。(一个Throwable不能自己的原因。)
IllegalStateException
-如果这个异常是
Throwable(Throwable)
或
Throwable(String,Throwable)
创建,这个方法已经被这个异常。
public String toString()
getLocalizedMessage
串联
getLocalizedMessage()
方法的结果null
,然后返回类的名称。
public void printStackTrace()
System.err
价值
Throwable
对象。输出的第一行包含该对象的
toString()
方法的结果。剩余的线代表的方法
fillInStackTrace()
先前记录的数据。这些信息的格式依赖于实现,但下面的例子可以作为典型:
这个例子是通过运行程序产生:java.lang.NullPointerException at MyClass.mash(MyClass.java:9) at MyClass.crunch(MyClass.java:6) at MyClass.main(MyClass.java:3)
类{public static void main(String [] args){紧缩(空);}静态紧缩(int [] a){麦芽浆(a);}static void醪(int [] B){系统。出来。println(B [ 0 ]);}}回溯一个Throwable的初始化,非空的原因一般应包括对该原因的回溯。这些信息的格式依赖于实现,但下面的例子可以作为典型:
highlevelexception:midlevelexception:lowlevelexception在垃圾,(垃圾。java:13)在垃圾。主要(垃圾。java:4)致:midlevelexception:lowlevelexception在垃圾。C(垃圾。java:23)在垃圾。B(垃圾。java:17)在垃圾,(垃圾。java:11)…1更致:lowlevelexception在垃圾。E(垃圾。java:30)在垃圾。D(垃圾。java:27)在垃圾。C(垃圾。java:21)…3更注意包含的字符
"..."
线的存在。这些线表明此异常堆栈跟踪的其余部分相匹配的显示帧数的例外,被这异常造成的堆栈跟踪底(“封闭”的例外)。这种速记可以大大减少在普通情况下,从同一方法抛出的“异常”被捕获的输出的长度。上面的例子是通过运行程序产生:
公共类垃圾public static void main(String参数[ ]){尝试{a();} catch(highlevelexception e){E. printstacktrace();}}a()抛出highlevelexception { static void尝试{b();} catch(midlevelexception e){把新的highlevelexception(E);}}b()抛出midlevelexception { static voidc();}c()抛出midlevelexception { static void尝试{d();} catch(lowlevelexception e){把新的midlevelexception(E);}}d()抛出lowlevelexception { static voide();}e()抛出lowlevelexception { static void把新的lowlevelexception();}}类highlevelexception延伸例外{highlevelexception(错误原因){超(原因);}}类midlevelexception延伸例外{midlevelexception(错误原因){超(原因);}}类lowlevelexception延伸例外{}在7版本中,该平台支持零抑制异常概念(与
try
-with-resources语句结合)。被抑制的任何异常,以提供一个异常,在堆栈跟踪下打印出来。这些信息的格式依赖于实现,但下面的例子可以作为典型:
在线程的“主”java.lang.exception例外:发生了什么事在foo。酒吧(foo。java:10)在foo。主要(foo。java:5)抑制:资源closefailexception:资源ID = 0美元在资源。关闭(资源。java:26)在foo。酒吧(foo。java:9)…1更注意”…更多的“符号被用来在被抑制的异常只是在它被使用的原因。不同的原因,抑制异常缩进超出他们“含例外。”
一个异常可以有一个原因和一个或多个被抑制的异常:
在线程的“主”java.lang.exception例外:主块在foo3。主要(foo3。java:7)抑制:资源closefailexception:资源ID = 2美元在资源。关闭(资源。java:26)在foo3。主要(foo3。java:5)抑制:资源closefailexception:资源ID = 1美元在资源。关闭(资源。java:26)在foo3。主要(foo3。java:5)致:java.lang.exception:我做到了在foo3。主要(foo3。java:8)同样,抑制异常可以有一个原因:
在线程的“主”java.lang.exception例外:主块在foo4。主要(foo4。java:6)抑制:资源职位closefailexception:资源ID = 1美元在资源职位。关闭(资源职位。java:20)在foo4。主要(foo4。java:5)致:java.lang.exception:鼠,你抓住了我在资源职位closefailexception美元。 <初始化> (资源职位。java:45)…2更 初始化>
public void printStackTrace(PrintStream s)
s
-
PrintStream
用于输出
public void printStackTrace(PrintWriter s)
s
-
PrintWriter
用于输出
public Throwable fillInStackTrace()
Throwable
对象的堆栈帧的当前状态信息为当前线程。
如果这Throwable
is not writable堆栈,调用该方法没有效果。
Throwable
实例。
printStackTrace()
public StackTraceElement[] getStackTrace()
printStackTrace()
编程访问。返回一个堆栈跟踪元素的数组,每个数组代表一个堆栈帧。阵列中的零元(假设数组的长度不为零)表示堆栈的顶部,这是序列中的最后一个方法调用。通常,在这一点上,这是创建并抛出Throwable。数组的最后一个元素(假设数组的长度为非0)表示堆栈的底部,这是序列中的第一个方法调用。
某些虚拟机可能在某些情况下,从堆栈跟踪中省略一个或多个堆栈帧。在极端的情况下,一个虚拟机,没有关于这个异常堆栈跟踪信息被允许返回一零数组长度从这个方法。一般来说,此方法返回的数组将包含每一帧,将印制的一元printStackTrace
。写入到返回的数组不影响未来对该方法的调用。
public void setStackTrace(StackTraceElement[] stackTrace)
getStackTrace()
和印刷
printStackTrace()
和相关方法。这种方法,这是专为使用RPC框架等先进系统,允许客户端覆盖默认的堆栈跟踪,要么是由
fillInStackTrace()
当一个Throwable构造或反序列化时,时间是从流中读取。
如果这Throwable
is not writable堆栈,调用此方法具有比其他验证其参数没有影响。
stackTrace
-堆栈微量元素是与此相关的
Throwable
。指定的数组是由这个叫复制;在指定的数组在方法调用返回的变化都会对这
Throwable
堆栈跟踪无影响。
NullPointerException
-如果
stackTrace
是
null
或者任何的
stackTrace
元素
null
public final void addSuppressed(Throwable exception)
try
-with-resources声明。
抑制行为,除非via a constructor启用禁用。当禁止被禁用时,该方法除了验证其参数之外没有任何别的方法。
请注意,当一个例外causes另一个例外,第一个例外是抓住第二抛出异常的响应。换言之,这两个例外之间有一个因果关系。相反,在一些情况下,两个独立的例外可以扔在同胞的代码块,特别是在一个try
-with-resources声明,编译器生成的try
块finally
块关闭资源。在这种情况下,只有一个抛出的异常可以传播。在try
-with-resources声明,当有两个这样的例外,从try
块的异常传播,从finally
块添加到例外的例外是从try
块异常抑制列表。作为例外,展开栈,可以积累多个抑制异常。
一个异常可能会抑制异常,同时也可能是由另一个异常引起的。是否有一个原因在语义上是已知的,在它的创建时,不同的是是否一个例外会抑制其他例外,通常只确定一个例外后抛出。
请注意,程序员编写的代码也能够利用调用这种方法的情况下,有多个兄弟姐妹的例外,只有一个可以传播。
exception
-要添加到例外列表中抑制异常
IllegalArgumentException
exception
Throwable throwable无法压抑自己。
null
exception
NullPointerException
public final Throwable[] getSuppressed()
try
-with-resources声明,为了实现这种例外。如果没有例外的被抑制或
suppression is disabled,则返回一个空数组。这种方法是线程安全的。写入到返回的数组不影响未来对该方法的调用。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.