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:[email protected]

转载请注明来源: http://www.cnblogs.com/attilax/

Atiend

时间: 2024-10-13 07:09:30

Atitit java的异常exception 结构Throwable类的相关文章

JAVA学习--异常Exception

一.异常的体系结构 * java.lang.Throwable  *         |-----Error:错误,程序中不进行处理  *         |-----Exception:异常,要求在编写程序时,就要考虑到对这些异常的处理  *                 |-----编译时异常:在编译期间会出现的异常(执行javac.exe命令时,出现异常) *                 |-----运行时异常:在运行期间出现的异常(执行java.exe命令时,出现异常)  *  *

JAVA学习--异常Exception的处理

* 二.如何处理Exception的异常  * Java提供的是异常处理的抓抛模型  * 1."抛":当我们执行代码时,一旦出现异常,就会在异常的代码处生成一个对应的异常类型的对象,并  *        将此对象抛出.(自动抛出   / 手动抛出)  *        >一旦抛出此异常类的对象,那么程序就终止执行  *        >此异常类的对象抛给方法的调用者.  * 2."抓":抓住上一步抛出来的异常类的对象.如何抓?即为异常处理的方式  * 

java开发异常Exception集锦

背景:整理开发过程中的异常问题 java.lang.Exception: No tests found matching 一般出现在新导入的工程中.在sts中通过open project的方式导入工程后,运行test用例,报No tests found matching错误. 根因是build path问题.解决方案: 1 查看jdk版本,更新到目前的版本 2 删除项目中的junit包,右键 Build Path, addLibraay, 添加Junit4,在build path中通过add l

浅谈java异常[Exception]

本文转自:focusJ 一. 异常的定义 在<java编程思想>中这样定义 异常:阻止当前方法或作用域继续执行的问题.虽然java中有异常处理机制,但是要明确一点,决不应该用"正常"的态度来看待异常.绝对一点说异常就是某种意义上的错误,就是问题,它可能会导致程序失败.之所以java要提出异常处理机制,就是要告诉开发人员,你的程序出现了不正常的情况,请注意. 记得当初学习java的时候,异常总是搞不太清楚,不知道这个异常是什么意思,为什么会有这个机制?但是随着知识的积累逐渐也

Java的异常机制

一.什么是异常:非正常的,不同寻常的,不是语法错误. 生活中,医生说你身体某个部位异常,该部位和正常相比,有点不同功能可能受损. 张三开车去上班,正常情况下,顺利到达公司 非正常情况下,车子坏了,走路去公司 异常指的 不是语法错误 ,语法错误编译通不过,不会产生字节码文件,根本不能运行 程序中:代码出现错误,程序就会停止运行. 异常处理是衡量一门语言是否成熟的标准之一.主流的java c++ c# 都有异常处理机制. 异常处理可以让程序有更好的容错性,使代码更健壮. 传统的c语言是没有异常处理的

《java中异常和错误》

异常和错误的区别. 异常: 在Java中程序的错误主要是语法错误和语义错误,一个程序在编译和运行时出现的错误我们统一称之为异常,它是VM(虚拟机)通知你的一种方式,通过这种方式,VM让你知道,你(开发人员)已经犯了个错误,现在有一个机会来修改它.Java中使用异常类来表示异常,不同的异常类代表了不同的异常.但是在Java中所有的异常都有一个基类,叫做Exception. 错误:它指的是一个合理的应用程序不能截获的严重的问题.大多数都是反常的情况.错误是VM的一个故障(虽然它可以是任何系统级的服务

java的异常情况

2019-11-03异常分类:所有的异常都在Throwable类里,Throwable有分为Error类和Exception类. 1.Error是程序无法处理的错误,表示运行应用程序中较严重问题.大多数错误与代码编写者执行的操作无关,而表示代码运行时JVM(Java虚拟机)出现问题.例如,Java虚拟机运行错误(Virtual MachineError),当JVM不再继续执行操作所需的内存资源时,将出现OutOfMemoryError.这些异常发生时,Java虚拟机(JVM)一般会选择线程终止.

Java基础-异常类--异常概念、一般格式、Throwable类的一些方法

简介: 1.异常的概念 异常:问题-->不正常情况--->封装成对象 ; java对不同的不正常情况进行描述后的对象体现; 对于严重的异常,java通过Error类进行描述-------一般不编写针对性的代码对其进行处理 对于非严重可处理的异常的,java通过Exception类进行描述--可使用针对性的代码进行处理 体系: Object<--Throwable<--Error/Exception 2.一般格式 try{ * * } catch(异常类 变量){ * 处理问题* }

java中异常类与类别

异常类的层次结构: 在 Java 中,所有的异常都有一个共同的祖先 Throwable(可抛出).Throwable 指定代码中可用异常传播机制通过 Java 应用程序传输的任何问题的共性,它们都在java.lang包下面. Error类标记了严重错误,类似内存溢出,虚拟机异常,等等,是不该出现的.这些错误表示故障发生于虚拟机自身.或者发生在虚拟机试图执行应用时,如Java虚拟机运行错误(Virtual MachineError).类定义错误(NoClassDefFoundError)等.这些错