第16章 异常与处理及内存管理

本章将分为两部分进行讲述:一部分要详细地讲述异常及其处理方法;另一部分介绍Java程序中的内存管理。第一部分,几乎在所有的开发程序中都存在。而第二部分的知识,是为了让读者能清楚地知道,Java程序运行和结束时,内存是如何分配的。

本章重点:

异常的处理。

异常的抛出和捕获。

内存的管理。

16.1 异常的概念

在以前的程序段中,经常会出现“try{}catch(Exception e){}”这样的语句。这就是本章重点要讲述的异常处理。为了让读者能循序渐进地掌握这一章,本节先讲述什么是异常,异常有哪几种。

16.1.1 异常的分类

所谓的异常,就是可以预见的错误。Java中所有的异常都从“Throwable”类中继承,不过一般情况下,都会由Exception类派生出来。异常分为两个部分:一部分是错误,另一部分是异常。对于错误来说,只能终止程序。

对于异常,又可以分为运行期异常和非运行期异常。一个运行期异常是由程序员自身的错误造成的。例如,一个越界的数组访问、一个空指针的访问等。而这些异常被称为未检查异常,它们都不应该产生,除此之外,都属于已检查异常。

本章主要讲述一些已检查异常,因为这些异常编译器不能处理,通过抛出一个已检查异常给异常处理器来处理,这样就可以顺利地通过程序的编译。

已检查异常可以分为很多种,主要分类如下:


ArithmeticException(算术异常)

NullPointerException(无空间对象异常)

ArrayIndexOutOfBoundsException(数组越界异常)

NegativeArraySizeException(数组长度为负值异常)

ArrayStoreException(数组存储异常)

IllegalArgumentException(非法参数异常)

SecurityException(安全性异常)


因为它们的父类都是Exception类,所以可以使用“Exception”来代替所有的异常。在实际开发中,这些类型的异常会经常遇到。例如,数组越界异常、数组存储异常、非法参数异常等。在编写程序代码时,可以不用写出详细的异常,使用它们的总类作为代替,即使用“Exception”来代替上面所有类型的异常。这样对编程人员来说,就省了很多事情。