Java 异常知识点

来源:互联网 发布:电脑文件数据恢复 编辑:程序博客网 时间:2024/06/09 19:46

1、重新抛出异常:如果只是把当前异常对象重新抛出,那么printStackTrace()方法显示的将是原来异常抛出点的调用栈信息,而并非重新抛出点的信息。要想更新这个信息,可以调用fiilInStackTrace()方法,这将返回一个Throwable对象,它是通过把当前调用栈信息填入原来那个异常对象而建立的。示例:

try{

...

}catch(Exception e){

e.printStackTrace();

throw (Exception)e.fillInStackTrace();

}

调用fillInStackTrace()的那一行就成了异常的新发生地。

2、异常链

在JDK1.4之前,程序猿必须自己编写代码来保存原始异常信息。现在所有Throwable的子类在构造器中都可以接收一个Cause对象作为参数,这个Cause就用来表示原始异常,这样通过把原始异常传递给新的异常,使得即使在当前位置创建并抛出了新的异常,也能通过这个异常链追踪到异常最初发生的位置。有趣的是,在Throwable子类中,只有三种基本的异常类提供了带Cause参数的构造器。它们是error、Exception、RuntimeException。如果要把其他的类型的异常连接起来,应该使用initCause()方法而不是构造器。

3、Java标准异常:Throwable这个Java类被用来表示任何可以作为异常被抛出的类。Throwable对象分为两种类型:1、Error用来表示编译时和系统错误;Exception是可以被抛出的基本类型,在Java类库、用户方法以及运行时故障中都可能抛出Exception型异常。所以Java程序猿关心的基类型通常是Exception。

运行时异常的类型有很多,它们会自动被Java虚拟机抛出,所以不必在异常说明中把它们列出来。这些异常都是从RuntimeException类继承而来,它们也被成为“不受检查异常”。这种异常会被自动捕获。只能在代码中忽略RuntimeException及其子类类型的异常,其他类型异常的处理都是由编译器强制实施的。究其原因,RuntimeException代表的是编程错误。

4、异常的限制

当覆盖方法的时候,只能抛出在基类方法的异常说明里列出的那些异常,否则的话,在使用基类的时候就不能判断是否捕获了正确的异常。这个限制很有用。因为这意味着,当基类使用的代码应用到其派生类对象的时候,一样能够工作,异常也不例外。

原创粉丝点击