标签:简单的 执行 art 情况 str 异常 效果 语句 init
P258)重抛异常会把异常抛给上一级环境中的异常处理程序,同一个try块的后续catch子句将被忽略。此外,异常对象的所有信息都得以保持。
如果只是把当前异常对象重新抛出,那么printStackTrace()方法显示的将原来的异常抛出点的调用栈信息,而并非重新抛出点的信息。要更新这个信息,可以调用fillInStackTrace()方法,这将返回一个Throwable对象,它是通过把当前调用栈信息重新填入原来那个异常对象而建立的。
P259)有可能在捕获异常之后抛出另一种异常。这么做的话,得到的效果类似于使用fillInStackTrace(),有关原来异常发生点的信息会丢失,剩下的是与新的抛出点有点的信息。
P260)异常链
现在所有Throwable的子类在构造器中都可以接受一个cause(因由)对象作为参数。这个cause就用来表示原始异常,这样通过把原始异常传递给新的异常,使得即使在当前位置创建并抛出新的异常,也能通过这个异常链追踪到异常最初发生的位置。
在Throwable的子类中,只有三种基本的异常类提供了带cause参数的构造器。它们是Error(用于Java虚拟机报告系统错误)、Exception以及RuntimeException。如果要把其他类型的异常链接起来,应该使用initCause()方法而不是构造器。
P266)finally
甚至在异常没有被当前的异常处理程序捕获的情况下,异常处理机制也会在跳到更高一层的异常处理程序之前,执行finally子句。
因为finally子句总是会执行的,所以在finally块内部,从何处返回无关紧要。
P268)异常丢失
如果在finally块中抛出异常,那么在finally块之前被捕获的异常信息将丢失。一种更简单的丢失异常的方式是从finally子句中返回。
P269)异常的限制
P272)回收资源
对于在构造器阶段可能会抛出异常,并且要求清理的类,最安全的使用方式是使用嵌套的try子句。其基本原则是:在创建需要清理的对象之后,立即进入一个try-finally语句块。
标签:简单的 执行 art 情况 str 异常 效果 语句 init
原文地址:http://www.cnblogs.com/ITStruggler/p/7060706.html