Atitit java的异常exception 结构Throwable类

1.1. Throwable类 2、StackTrace栈轨迹1

1.2. 3、cause因由1

1.3. 4、SuppressedException被屏蔽的异常2

1.4. try-with-resources语句2

1.5. 八、异常说明的继承。2

1.1. Throwable类 2、StackTrace栈轨迹

栈轨迹记录了程序从开始到异常抛出点所调用的方法。通过StackTraceElement[] getStackTrace()可以获得一个StackTraceElement的数组,每个StackTraceElement记录一个栈帧,0号元素表示栈顶,由栈的FILO规则可知0号元素表示最后调用的方法,而栈底则表示第一个调用的方法,一般就是main了。

Throwable提供了一个打印栈轨迹的方法void printStackTrace(),输出到System.err,如要输出到其它地方,可调用printStackTrace(PrintStream s)或void printStackTrace(PrintWriter s)。

重抛异常时,异常对象的所有信息保持不变,所以printStackTrace()西那是的将是原来异常抛出点的调用栈信息,而非重新抛出点的信息。要想更新这个信息,可以调用Throwable fillInStackTrace(),该函数将产生一个新的Throwable对象,它是通过把当前的调用栈信息填入原来那个异常对象而建立的。调用fillInStackTrace()的那一行成了异常的新发生地。不过fillInStackTrace()要生效必须保证StackTrace是可写的,这个可通过调用构造器Throwable(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace)实现。

1.2. 3、cause因由

当我们在捕获到一个异常后想抛出另一个异常,并且希望把原始的异常信息保存下来,就可以调用构造器把原始的异常对象保存到新的Throwable的cause中,如Throwable(String message, Throwable cause)。或者构造新的异常对象时没有初始化cause,则可以调用Throwable initCause(Throwable cause),这个方法最多只能调用一次,也就是说cause一旦初始化了就不能再设置。 可以把cause看成是链表元素中指向上一个元素的引用,所以最终将形成一条异常链。异常链的信息会在printStackTrace()中打印出来。

1.3. 4、SuppressedException被屏蔽的异常

保存被屏蔽的异常,可通过Throwable[] getSuppressed()获得。添加的话用addSuppressed(Throwable exception),这个函数一般是在try-with-resources语句中由自动调用的。

1.4. try-with-resources语句

从 Java 7 build 105 版本开始,Java 7 的编译器和运行环境支持新的 try-with-resources 语句,称为 ARM 块(Automatic Resource Management) ,自动资源管理。使用如下:

try (InputStream fis = new FileInputStream(source);

OutputStream fos = new FileOutputStream(target)){

}

catch (Exception e) {

e.printStackTrace();

}

}

在使用try-with-resources语句的时候,异常可能发生在try语句中,也可能发生在释放资源时。如果资源初始化时或try语句中出现异常,而释放资源的操作正常执行,try语句中的异常会被抛出;如果try语句和释放资源都出现了异常,那么最终抛出的异常是try语句中出现的异常,在释放资源时出现的异常会作为被抑制的异常添加进去,即通过Throwable.addSuppressed方法来实现。

能够被try语句所管理的资源需要满足一个条件,那就是其Java类要实现java.lang.AutoCloseable接口,否则会出现编译错误。当需要释放资源的时候,该接口的close方法会被自动调用。Java类库中已有不少接口或类继承或实现了这个接口,使得它们可以用在try语句中。在这些已有的常见接口或类中,最常用的就是与I/O操作和数据库相关的接口。与I/O相关的java.io.Closeable继承了AutoCloseable,而与数据库相关的java.sql.Connection、java.sql.ResultSet和java.sql.Statement也继承了该接口。如果希望自己开发的类也能利用try语句的自动化资源管理,只需要实现AutoCloseable接口即可。代码清单1-19给出了一个自定义资源的使用示例,在close方法中可以添加所需要的资源释放逻辑。

1.5. 八、异常说明的继承。

前面说过异常说明是方法声明的一部分,那么如果派生类想覆盖基类的某个包含异常说明的方法,需要如何处理呢?这个问题要分为两种情况,一种是对于构造函数,另外一种是对于成员方法。

对于覆盖成员方法的情况,为了满足多态的情况,我们必须保证处理基类方法产生异常的程序能处理派生类方法所能产生的异常(因为我们可以把派生类向上转型为基类),这就要求派生类方法的异常说明中的异常必须包含于基类方法的异常说中。

对于构造函数,我们调用的时候对象还没有生成,所以不能将其赋予一个基类引用,不存在多态的情况,所以派生类构造函数的异常说明中可以包含基类构造函数的异常说明中没有的异常类型。另一方面,由于派生类的构造函数会调用基类的构造函数,会产生基类构造函数能产生的异常,所以派生类构造函数的异常说明应包含基类构造函数的异常说明中的异常类型。这跟成员方面的情况刚好相反。

Java异常处理机制_supernan_新浪博客.html

作者:: 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 )

汉字名:艾提拉(艾龙),   EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

Atiend

Atitit java的异常exception 结构Throwable类相关推荐

  1. JAVA标准异常分两大类_java异常分类

    Java中异常的分类 所有异常,都继承自java.lang.Throwable类. Throwable有两个直接子类,Error类和Exception类. Exception Exception则可使 ...

  2. java throwable_java中怎么捕获异常?Throwable类的方法有哪些?

    我们已经为大家介绍过java异常处理的原因,今天继续为大家讲述下java怎么捕获异常,以及通过图表为大家描述Throwable类的方法是怎样的. 首先,应该怎么捕获异常呢? 我们可以使用try和cat ...

  3. JAVA学习--异常Exception

    一.异常的体系结构 * java.lang.Throwable  *         |-----Error:错误,程序中不进行处理  *         |-----Exception:异常,要求在 ...

  4. java构建树状结构工具类

    树状结构工具 创建类TreeUtil 类属性 private List<T> rootList; //根节点对象存放到这里private List<T> bodyList; / ...

  5. java 实例化异常_如何处理实例化类对象时发生的异常

    java version "1.7.0_45" 你好 我正在构造函数中初始化类方法.但是,新URL(uploadUrl)将在构造函数中引发异常.因此,如果发生这种情况,用户应该无法 ...

  6. java throwable_JAVA异常类Throwable解析

    在 Java 中,所有的异常都有一个共同的祖先java.lang包中的 Throwable类. Throwable: 有两个重要的子类:Exception(异常)和 Error(错误) :二者都是 J ...

  7. [java基础问题] Exception 和 Error

    Exception 和 Error Exception 和 Error 都是继承了 Throwable 类, 在 java 中, 只有继承了 Throwable 类才可以使用 throw 抛出, 或者 ...

  8. java受检异常和非受检异常的区别

    原文链接:https://blog.csdn.net/lgxlovett/article/details/51329897 java中异常分为两大类:checkedexception(检查异常)和un ...

  9. Java:异常的处理(加深理解)

    目录 1.关于异常 异常的分类 2.异常处理 try -catch-finally的使用 throw和throws关键字 自定义异常: 1.关于异常          什么是异常: - 异常字面意思就 ...

  10. 【Java】常见的异常和Throwable类

    重要的UncheckedException 异常 描述 ArithmeticException 当出现异常的运算条件时,抛出此异常.例如,一个整数"除以零"时,抛出此类的一个实例. ...

最新文章

  1. 2021高考成绩一分段查询陕西省,2021年陕西高考一分一段表查询排名方法 成绩排名位次什么时候公布...
  2. 如何使用 Istio 进行多集群部署管理(一)
  3. boost::math::quadrature::naive_monte_carlo用法的测试程序
  4. java压缩zip文件中文乱码问题
  5. 教学转用计算机,一种计算机教学用旋转显示屏的制作方法
  6. 介绍电子计算机的英文简介,写介绍电脑的英语作文
  7. dell linux raid 查看,Ubuntu Linux下Dell服务器使用硬Raid后查看磁盘信息方法
  8. java mschart_关于vb中MSCHART控件画二维线图 - conkeyn - JavaEye技术网站
  9. 手机软件测试sim卡流程,传统SIM卡:该说再见了
  10. Kali Linux系统apt源配置
  11. 星际开图挂_别开|《星际争霸2》牛X强力高端职业玩家手把手教你识别开图挂_234游戏网...
  12. Codeforces Round #433 (Div. 1, based on Olympiad of Metropolises) C. Boredom(主席树)
  13. 二级联动 三级联动 多级联动 无限级联动下拉列表或菜单专题
  14. 抽卡计算机在线,《闪耀暖暖》抽卡概率计算器
  15. Js二代身份证号码正则验证
  16. 文字识别中CTC损失的直觉解释
  17. android实现简单的记账功能
  18. 百度网盘登陆科创板,真能值400亿吗?很有可能
  19. mysql反模式_myfat: MyFat是MyBatis的DAO功能增强插件
  20. arduino程序烧录(USBasp下载器)

热门文章

  1. matlab中极点留数法,用MATLAB求留数.pdf
  2. 一文了解数据库索引:哈希、B-Tree 与 LSM
  3. OpenGL快速入门
  4. 为何要学习 Linux?
  5. Lync 小技巧-8-超速-更新-地址簿
  6. MySQL基础操作命令
  7. 七、JVM类加载机制
  8. 英国大概率退出欧盟!
  9. HPE服务器做raid5阵列
  10. JS 动态修改json字符串