public class Throwable

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

}

posted on 2008-03-19 16:14 白露 阅读(1257) 评论(0)  编辑  收藏 所属分类: java基础

throwable java_java Throwable相关推荐

  1. throwable java_java异常Throwable的问题,估计会的没几个。实话!!

    有两个异常A和B,都是继承自Exception,在代码中捕获到A,底层抛的时候是封装成B往外抛的,当然还有一部分是B自己的异常,所以catch的时候只能捕获到B,但是我想判断到底是A还是B抛的,我怎么 ...

  2. php throwable,PHP Throwable接口

    介绍 在PHP 7中,Throwable接口充当任何对象的基础,该对象可以是throw语句的参数,包括Error和Exception.分别从其派生预定义的和用户定义的错误与异常类的Error和Exce ...

  3. JDK源码解析之 java.lang.Throwable

    在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出).Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性. 一.类定义 public c ...

  4. Java Throwable initCause()方法与示例

    Throwable类initCause()方法 (Throwable Class initCause() method) initCause() Method is available in java ...

  5. throwable和Exception的区别

    throwable和exception的区别: 1.throwable是父类,exception是子类. 2.throwable是根基,exception是从throwable派生出来的. 3.thr ...

  6. Throwable 类

    异常 Throwable 类 Throwable 类是Java语言中所有错误和异常的顶级父类,直接子类为 Error 和 Exception 构造方法 // 无参构造:构造一个新的 throwable ...

  7. Throwable类的详细解释

    概述  软件包   类  使用  树  已过时  索引  帮助    JavaTM 2 Platform Standard Ed. 5.0    上一个类   下一个类 框架    无框架    所有 ...

  8. java的throwable子类_lang——Throwable子类

    本文导引: Throwable概述 Throwable是lang包的一级子类,是 Java 语言中所有错误或异常的超类. Throwable有两个子类,即Error 和Exception. Error ...

  9. throwable在JAVA中什么意思_Throwable和Exception的区别

    Java语言要求java程序中(无论是谁写的代码)所有抛出(throw)的异常都必须是从Throwable派生而来.当然,实际的Java编程中,由于JDK平台已经为我们设计好了非常丰富和完整的异常对象 ...

最新文章

  1. python难嘛-我没有基础,能否学会Python?Python难吗?
  2. 4个变量取最大值 c++_DNF:安徒恩上线服务器爆满,甲板上全是火山C,通关翻出4个金牌...
  3. Unity 2017 Game Optimization 读书笔记 Scripting Strategies Part 5
  4. HALCON示例程序class_2dim_unsup.hdev基于二维直方图的聚类分类
  5. 细数sass安装中遇到的坑
  6. 计算机科学与技术排名中澳合作,计算机科学与技术(中澳合作)2018培养方案.docx...
  7. rsync 自动创建目录的坑点
  8. MYSQL必知必会-where语句
  9. MATLAB 距离函数及用法
  10. codeproject的文章【一】
  11. 疫情防控背景下在线课程教学满意度影响因素分析与对策探讨-以电子商务及法律专业为例
  12. 批量打印cad的dwg文件图纸的解决方案
  13. Android百度地图导航出现无法起调问题的解决方法
  14. 论文笔记:Delving into Data: Effectively Substitute Training for Black-box Attack
  15. 坚果云 linux 使用方法,树莓派4B踩坑指南 - (10)安装坚果云(暂时失败)
  16. 靖哥哥教你如何在docker中安装mysql
  17. 去掉迅雷右侧内置浏览器
  18. 【山外笔记-计算机网络·第7版】第10章:计算机网络重要概念
  19. mysql 索引 二_MySql索引(二)
  20. 电容电压不能突变和电感电流不能突变仿真分析

热门文章

  1. 13SQL - SQL通配符
  2. windows10强制删除文件_Windows 10 手动快速清理C盘空间
  3. typeof数据类型
  4. 大一c语言考试题模板,大一计算机考试操作题
  5. 品味家的自然享乐主义
  6. 硕士生一字不差抄袭顶会论文投稿,北理工:严重学术不端,留校察看
  7. JAVA开发(关于写代码与数学)
  8. 全国31省城市化水平程度数据集(1990-2021年)
  9. 如何使用 IIS 在 Windows 上设置 PHP Manager管理器
  10. 深度学习这么调参训练_深度学习调参及训练技巧(转)