阅读1005 返回首页    go 阿里云 go 技术社区[云栖]


《数据结构与抽象:Java语言描述(原书第4版)》一JI2.1 基础

本节书摘来华章计算机《数据结构与抽象:Java语言描述(原书第4版)》一书中的第2章 ,第2.1节,[美]弗兰克M.卡拉诺(Frank M. Carrano) 蒂莫西M.亨利(Timothy M. Henry) 着 罗得岛大学  新英格兰理工学院 辛运帏 饶一梅 译 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

JI2.1 基础

当在一个方法内发生异常时,该方法创建一个异常对象,并将它传给Java运行时系统。我们说方法抛出(throw)一个异常。被抛出的异常是发给程序的其他部分的一个信号,表示某些意外的事情发生了。根据异常类的类型,以及异常对象通过其方法告诉我们的信息,代码可以对其进行适当的响应处理。当发现并响应异常时,就是处理(handle)异常。
异常属于不同的类,不过所有这些类都是标准类Throwable的后代。Throwable在Java类库中,不需要import语句就可以使用。异常分为以下三组:

  • 受检异常,它必须被处理。
  • 运行时异常,它不需要处理。
  • 错误,它不需要处理。

受检异常(checked exception)是程序执行期间发生的严重事件的后果。例如,如果程序从磁盘读数据,而系统找不到含有数据的文件,将发生受检异常。这个异常所属类的类名是FileNotFoundException。用户提供给程序的可能是一个错误的文件名。写得好的程序应该提前预见这个事件,可能要求使用者再次输入文件名,以便能从中恢复正常。这个名字,与Java类库中所有异常类的名字一样,是用来描述异常原因的。通常的做法是使用类名来描述异常。例如,可能说发生了一个FileNotFoundException异常。受检异常的所有类都是类Exception的子类,Exception是Throwable的后代。

注:Java类库中的受检异常
Java类库中的下列类表示受检异常,你或许会遇到它们:
image
运行时异常(runtime exception)通常是程序中逻辑错误的结果。例如,数组下标越界导致ArrayIndexOutOfBounds类的异常。被0除导致ArithmeticException异常。虽然可以添加代码来处理运行时异常,但通常只需要修改我们程序中的错误。运行时异常的所有类都是类RuntimeException的子类,它是Exception的后代。
注:Java类库中的运行时异常
Java类库中的下列类表示运行时异常,你或许会遇到它们:
image

错误(error)是标准类Error或其后代类的一个对象。将这样的类都称为错误类(error class)。注意,Error是Throwable的后代。一般地,错误是指发生了不正确的情况,如内存溢出。如果程序使用的内存超出了限度,则必须修改程序以使内存的使用更有效率,改变配置让Java能访问更多的内存,或为计算机购买更多的内存。这些情况都太严重了,一般程序很难处理。所以,即使处理错误是合法的,一般也不需要处理它们。
图JI2-1展示了一些异常和错误类的层次关系。运行时异常,比如ArithmeticException,是RuntimeException的后代。受检异常,例如IOException,是Exception的后代,但不是RuntimeException的后代。序言中段P.9中定义的断言错误,是类AssertionError的对象,Error是AssertionError的父类。在第7章中讨论递归时,将提到栈溢出错误。这个错误属于类StackOverflowError。StackOverflowError和OutOfMemoryError都派生于抽象类VirtualMachineError,Error也是VirtualMachineError的父类。到目前为止,首要的一点是,我们要知道StackOverflowError、OutOfMemoryError和AssertionError的祖先类是Error而不是Exception,不过所有的异常和错误都派生于Throwable。


image

注:异常的层次
受检异常、运行时异常和错误的类(共同称为异常类(exception class))都是标准类Throwable的后代。运行时异常的所有类都派生于RuntimeException,而它又派生于Exception。受检异常是派生于Exception的类的对象,但它不是RuntimeException的后代。运行时异常和错误称为未检异常(unchecked exception)。
注:很多异常类都在包java.lang中,所以不需要引入。但有些异常类在其他的包中,它们必须要引入。例如,当在程序中使用类IOException时,必须使用引入语句
image

我们会在附录E中遇到这个异常。

最后更新:2017-06-26 18:02:35

  上一篇:go  6月26日云栖精选夜读:成为一名Java高级工程师你需要学什么
  下一篇:go  《数据结构与抽象:Java语言描述(原书第4版)》一Java插曲2