java异常所有的异常都是由Throwable继承而来,但在下–层立即分解为两个分支: Error 和Exception

Error类层次结构描述了Java运行时系统的内部错误和资源耗尽错误。应用程序不应该抛出这种类型的对象。如果出现了这样的内部错误,除了通告给用户,并尽力使程序安全地终止之外,再也无能为力了。这种情况很少出现。

在设计Java程序时,需要关注Exception层次结构。这个层次结构又分解为两个分支: -个分支派生于RuntimeException;另一个分支包含其他异常。划分两个分支的规则是:由程序错误导致的异常属于RuntimeException;而程序本身没有问题,但由于像I/0错误这类问题导致的异常属于其他异常。

派生于RuntimeException 的异常包含下面几种情况:
●错误的类型转换。
●数组访问越界。
●访问null指针。
不是派生于RuntimeException的异常包括:
●试图在文件尾部后面读取数据。
●试图打开一个不存在的文件。
●试图根据给定的字符串查找Class对象,而这个字符串表示的类并不存在。
“如果出现RuntimeException异常,那么就一定是你的问题”是一条相当有道理的规则。应该通过检测数组下标是否越界来避免ArrayIndexOutOfBoundsException异常;应该通过在体用弯量方前检测是否为null来杜绝NullPointerExcention异常的发生


抛出异常

Java 语 言 规 范 将 派 生 于 Error 类 或 RuntimeException 类的所有异常称为非受查( unchecked ) 异常, 所有其他的异常称为s受检查(checked) 异常。

在自己编与方法时,不必将所有可能抛出的异常都进行声明。至于什么时候需要在方法中用throws子句声明异常,什么异常必须使用throws子句声明,需要记住在遇到下面4种.情况时应该抛出异常:

  • 调用一个抛出受查异常的方法,例如,FileInputStream构造器。
  • 程序运行过程中发现错误,并且利用throw语句抛出一一个受查异常(下一节将详细地 介绍throw语句)。
  • 程序出现错误,例如,a[-1]=0会抛出一个ArrayIndexOutOfBoundsException这样的 非受查异常。-
  • Java虚拟机和运行时库出现的内部错误。

怎样抛出异常

  • 找到一个合适的异常类。
  • 创建这个类的一个对象。
  • 将对象抛出

捕获异常

如果在 try语句块中的任何代码抛出了一个在 catch 子句中说明的异常类, 那么、程序将跳过 try语句块的其余代码。程序将执行 catch 子句中的处理器代码。
在一个 try 语句块中可以捕获多个异常类型,并对不同类型的异常做出不同的处理。可以按照下列方式为每个异常类型使用一个单独的 catch 子句
try{ 代码块}
catch(FileNotFoundException e){
}
catch(UnknownHostException e){
}
catch((IOException e){
}
异常对象可能包含与异常本身有关的信息。要想获得对象的更多信息, 可以试着使用e.getMessage()
得到详细的错误信息(如果有的话,) 或者使用e.getClass().getName()得到异常对象的实际类型。


finally 子句

不管是否有异常被捕获,finally 子句中的代码都被执行。
在需要关闭资源时, 用这种方式使用 finally 子句是一种不错的选择。

注意:
当 finally 子句包含 return 语句时, 将会出现一种意想不到的结果„ 假设利用 return语句从 try语句块中退出。在方法返回前, finally 子句的内容将被执行。如果 finally 子句中也有一个 return 语句, 这个返回值将会覆盖原始的返回值。

相关文章: