![Java编程指南:基础知识、类库应用及案例设计](https://wfqqreader-1252317822.image.myqcloud.com/cover/948/31169948/b_31169948.jpg)
5.4 Java基础包中定义的常用异常类
在Java体系的异常处理机制中,异常是以类对象的形式出现的,通过类描述异常可以封装有关异常的所有信息,为异常的处理提供方便。与所有Java类都是由java.lang.Object类派生出来的一样,所有被确定描述异常的类都是java.lang.Throwable类派生出来的,包括Java类库提供的异常类和自定义的异常类,Java体系制定的异常处理机制就是针对这些类创建的对象进行处理的,因此,只有Throwable类及其派生类才适合Java的异常处理机制。
5.4.1 异常类的根类与直接子类
在Java基础包java.lang中定义的Throwable异常类是所有异常类的根类,但它同样也是java.lang.Object的子类,在Throwable类中定义了一些与异常相关的操作方法,同时还继承了Object类的所有方法,Throwable类中的常用方法和操作功能如表5-1所示。
表5-1 Throwable类中常用方法及其操作功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T139_15141.jpg?sign=1739290734-ZoPMWWEyGk2douIYYOQXVS9dH91rM1BW-0-38710b2ce3e30d100ece0befb628ed80)
在Java基础包java.lang中定义了许多常用的Throwable类的子类,其中Exception和Error类是Throwable类的直接子类,Throwable类也只有这两个直接子类。Exception异常类是可以捕获及修正的,因此,Exception异常类及其派生类是适合Java的异常捕获、传播及修正处理的。Exception类定义的方法和操作如表5-2所示。
表5-2 Exception类中常用方法及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T139_4331.jpg?sign=1739290734-Ra4Ouy8JIFDxN4dPSwLoCQXV1yZhMYco-0-1643ce8e2dbf7146f885729cbb094be0)
从制定Java异常处理机制的原则可知,所有从Throwable类派生的子类异常对象都适合使用该机制进行处理,但是,在Java包中定义的Error类及其派生类,一般描述的是应用程序致命的严重错误,基本上是Java虚拟机产生的与其相关的、不可逆转的错误,发生Error异常将会导致应用程序中断,一般在应用程序中不对这类异常做处理,也无法进行处理,Error类定义的方法和功能如表5-3所示。
表5-3 Error类中常用方法及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T140_15143.jpg?sign=1739290734-3E3HhudbPkkMDJivymv5zGpXApvoT0GC-0-1dedeb95dd867a3fe83040ab498b3ed1)
Exception和Error类的定义表明,它们只声明了各自的构造方法,没有添加属于自己类的方法,只是继承了父类的所有方法,并为其所拥有。Exception或Error类就是通过自身的构造方法创建Exception或Error对象,并通过该对象实现其父类所有方法的调用。
【示例5-10】 产生整数被0除和数组越界两个异常的程序,通过声明的Exception类对象e将各自的异常情况输出显示出来。其程序代码为:
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-P140_15144.jpg?sign=1739290734-RrdHwWgo78KXZSnkiw53KdCXfKzUBgaE-0-ee0a6314a4577e40156e111470e923e1)
以下是上述程序输出显示结果:
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-P141_15147.jpg?sign=1739290734-cYgZX8NMa2WHg96sYeaPbCrjXTfsMZCW-0-8442f3179a56bf1dc3efa73a96fbfb40)
调用Throwable类方法:输出显示异常的各种信息。
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-P141_15148.jpg?sign=1739290734-tbjQgQShRNJEFYeIfR6izVxndeXe1rBt-0-18fb75d4e9bcaa286940f15edf13f8dd)
调用Object类方法:
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-P141_15149.jpg?sign=1739290734-m6L1bdXjoGp7zKUqVPIBoryyAV7bmebb-0-2f34390169574caf2d5d62ced1b36391)
调用Throwable类方法:输出显示异常的各种信息。
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-P141_15150.jpg?sign=1739290734-Lw7sydW7KOkTlqGqNk6C33mr0QF4oeZd-0-89a6b051b134a24bef60c8b466b65edc)
调用Object类方法:
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-P141_15151.jpg?sign=1739290734-DYfnh8jYdSxQn5kUfMbZuFho4Q7i4qnl-0-7ca2e0d11c7609ae108ab97c81476a19)
从程序的输出结果可以看出,Java虚拟机在处理异常时已经将各种异常进行了分类,这些异常的类正是对应Exception类的子类。
5.4.2 java.lang包中定义的具体异常类
在java.lang包中定义的Exception类的直接子类及其功能说明如表5-4所示。
表5-4 Exception类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T142_4582.jpg?sign=1739290734-sWe2aM32tAOy2SbguCEvLrJLJUSoAPGv-0-cafdfa7e81dec92bfc03a6dc57c6ffc4)
在java.lang包中定义的RuntimeException类的直接子类及其功能说明如表5-5所示。
表5-5 RuntimeException类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T142_4584.jpg?sign=1739290734-CUSwwwHuvtTqrbnUzYwA9V3SeTePt0A2-0-0e8ec337c60f89e7bb370aa66442a1ac)
在java.lang包中定义IllegalArgumentException类的直接子类及其功能说明如表5-6所示。
表5-6 IllegalArgumentException类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T142_15153.jpg?sign=1739290734-ZCm9RdUaKMg0Ai4X8RloAmZExoJjV1mX-0-9f7c0565bd1203667b6c226ccbf8b41f)
在java.lang包中定义的IndexOutOfBoundsException类的直接子类及其功能说明如表5-7所示。
表5-7 IndexOutOfBoundsException类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T142_15154.jpg?sign=1739290734-V5FsajUQJgTeELZJFso6ncxlLa8pdfP0-0-3c7a2406c48bb3c8b0a7b3693ed3d8c5)
在java.lang包中定义的Error类的直接子类及其功能说明如表5-8所示。
表5-8 Error类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T143_4741.jpg?sign=1739290734-2RrOVkknTCncJdjQjGS7offMQlvMC20X-0-6209c9c69d8c1018de2cddc8852828dd)
在java.lang包中定义的LinkageError类的直接子类及其功能说明如表5-9所示。
表5-9 LinkageError类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T143_15156.jpg?sign=1739290734-iRnlEbfQIuPNh8AcIqqpr3U2HPrHI1vB-0-1c218ddbcc3934293966b6a0dfe927b4)
在java.lang包中定义的VirtualMachineError类的直接子类及其功能说明如表5-10所示。
表5-10 VirtualMachineError类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T143_4745.jpg?sign=1739290734-8oZyzJrSFDcLtUu1i0sVaDKD9oSvHhCo-0-72fb1d5b56cdf0524493fb3495cf543d)
在java.lang包中定义的IncompatibleClassChangeError类的直接子类及其功能说明如表5-11所示。
表5-11 IncompatibleClassChangeError类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T143_15157.jpg?sign=1739290734-IyQyESr1D6rg6MzUICa69T9cbKZJdW2a-0-ffae7772195c801b8af0e94840f0020b)
在java.lang包中,所有Exception和Error类的异常子类的定义基本上与Exception和Error类的定义是一样的,它们都是重新构造了各自子类的构造方法,其子类的内部方法则是继承了父类的方法。
除java.lang包外,在Java的所有类库中,每个包都定义了与该包中类库实现功能相关的异常类,当Java虚拟机执行操作代码出现异常时,它会创建一个与异常相关的异常对象,在异常对象中包含有关异常的各种信息,然后将异常对象抛出,提供给应用程序进行捕获、修正、再抛出等相关处理。因此,在使用Java类库中类的方法时应注意方法抛出的异常,并根据异常信息再做相应的异常处理。