public class Throwable
extends Objectimplements 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 }
分享到:
相关推荐
对于初学者来说,通过Java API阅读器学习基础类库,如集合框架(`java.util`包)、异常处理(`java.lang.Throwable`及子类)、多线程(`java.lang.Thread`和`java.util.concurrent`包)等,是快速入门和提升技能的...
17. Throwable 类:Throwable 类是 Java 异常类的根类。 18. this 关键字:this 关键字表示对当前对象的直接父类对象的引用。 19. 实现接口:一个类要实现一个接口时,需要使用 interface 关键字。 20. 面向对象...
Java异常类都是继承自`java.lang.Throwable`类,它是所有异常和错误的根类。`Throwable`有两个主要的子类:`Error`和`Exception`。`Error`代表系统级的严重问题,如虚拟机错误,通常程序员无法处理;而`Exception`则...
在Java编程中,代理类(Proxy)是一种设计模式,它允许我们为已有对象创建一个代理对象,以便在调用实际对象的方法...通过阅读博文链接(已提供但无法直接访问),你可以获取更多关于这个主题的实践案例和细节分析。
对于初学者来说,这是一个很好的学习资源,可以通过阅读和使用这些工具类来提升编程技能。但同时,理解其内部原理并不仅仅依赖于使用,还需要深入研究Java的官方文档和相关源码,以达到融会贯通的效果。
在Java SE API的“lang”包中,还有一些其他重要的类,如Throwable类(表示程序中的错误和异常)、Thread类(用于多线程编程)、ClassLoader类(负责加载类)等。 在学习和使用这些类时,开发者应该理解它们的功能...
所有异常的基类是Throwable类。Throwable有两个直接子类:Error和Exception。Exception类又可以进一步细分为IOException、SQLException等。在这些异常中,有些是编译时异常,比如IOException,必须在编译阶段被处理...
7. 所有的异常类都继承自Throwable类。 8. 在Java中,由Java编译器自动导入的包是java.lang包。 9. 如果父类不允许其通过继承的方式产生的子类访问它的某些成员,那么它必须使用private或protected方式声明该成员。 ...
WebSocket工具类是一个在Java开发中用于处理WebSocket协议的实用程序类。...通过阅读`WebSocketUtil.java`的源码,我们可以更深入地了解其实现细节和功能扩展,进一步提升WebSocket应用的开发效率。
此外,JAVA的异常体系是层次化的,每个异常类都继承自java.lang.Throwable类。 再者,集合框架是JAVA处理数据集合的重要工具。ArrayList、LinkedList、HashSet、HashMap等都是常用的集合类,它们各自具有不同的特点...
所有异常类都直接或间接继承自Throwable类。Throwable有两个主要子类:Error和Exception。Error类通常代表系统级别的问题,程序无法直接处理,而Exception类则包括了运行时异常和非运行时异常。运行时异常,如...
* 异常是一种对象,继承自 `Throwable` 类。 * 异常处理的主要步骤是:抛出异常(throw) -> 捕捉异常(catch) -> 处理异常(finally)。 三、异常类的继承关系 * `Throwable` 是所有异常类的父类。 * `Error` 和...
6. **异常处理(java.lang.Throwable)**:所有的错误和异常都继承自Throwable类,Exception是程序运行时可能出现的异常,而Error表示系统级的严重问题。 7. **日期和时间(java.util.Date和java.time)**:JDK 1.6...
异常类继承自`java.lang.Throwable`,分为检查异常(必须处理)和运行时异常(可选处理)。 9. **访问控制与权限修饰符**:Java的访问控制包括public、default(包访问)、protected和private,它们决定了类、方法...
在"cglib-2.2-license.txt"文件中,可能包含了关于CGlib 2.2.0版本的许可协议信息,这关乎到软件的合法使用和分发,开发者在使用该库时应仔细阅读并遵循这些条款。 总的来说,CGlib是一个强大且灵活的工具,能够...
- 异常类继承自`java.lang.Throwable`,如`IOException`, `NullPointerException`等 9. **集合框架**: - Java提供了一整套集合框架,如ArrayList、LinkedList、HashMap等,用于存储和操作对象数组 - 集合框架...
`java.lang.Throwable`类及其子类如`Exception`和`Error`,定义了Java中的错误和异常体系,使得程序能以优雅的方式处理运行时问题。 此外,`java.awt`和`javax.swing`包提供了图形用户界面(GUI)组件,如按钮、...
在Java中,`Throwable`是所有错误和异常的父类,包括`Error`和`Exception`。`Error`通常代表系统级或编译期错误,而`Exception`用于程序运行时可能出现的问题。考生需要理解如何使用`try-catch`语句捕获和处理异常,...
本教程将介绍如何在Android应用中实现崩溃日志的自动保存到SD卡,本地阅读以及通过电子邮件发送。这有助于开发者在无法直接访问设备的情况下,远程获取到错误信息。 首先,我们需要在应用发生异常时捕获崩溃日志。...
异常类继承自`java.lang.Throwable`,分为检查异常(编译时必须处理)和运行时异常(可以选择处理)。 文件“Java面向对象编程指南.pdf”可能涵盖了这些概念,并在第119页缺失。为了解决这个问题,作者提供了...