![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=1739284483-crxuabome7cl1Cu1AwVFLWmoCMGo8BHJ-0-cb3d137a8be6275c193f9e054445f675)
在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=1739284483-WhK6MZLHleeFeXiNSrLAX2SX973sbjuR-0-aa8b8ff1b4fa0dad8d05c6caa14f71fd)
从制定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=1739284483-MeK9Otn5oVIhgWQYZVZIBYc5YZitq0Ny-0-a508e5213bcfb87f8b3486ad0fbfc4ff)
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=1739284483-tFEU1UmkfO1PNa6RzU6NJcmpN7ux6EBe-0-2aa605901709bba51b465e9b71ba01b6)
以下是上述程序输出显示结果:
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-P141_15147.jpg?sign=1739284483-E2KeIWUiu5zk7j3NBvEVMhMgvtJ5kLYY-0-aa1e2b0236bb826b5e2041cbd8c0e27b)
调用Throwable类方法:输出显示异常的各种信息。
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-P141_15148.jpg?sign=1739284483-iHwqVfNxZ8jrz5GRDmcEgfF5JzislsMf-0-8576fd8c75ca80109c56b0ad1b56400e)
调用Object类方法:
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-P141_15149.jpg?sign=1739284483-LiVpMawm8OfUGRXsFzkOZfMrNS8Kg2pS-0-0cc6f70cb438bd2b4042c3e448f0d255)
调用Throwable类方法:输出显示异常的各种信息。
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-P141_15150.jpg?sign=1739284483-oJ2bB9yTT2Zr4IvPPd76uO8DcX9gClvk-0-36dfaae650a87b5472513ed305c9d8c0)
调用Object类方法:
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-P141_15151.jpg?sign=1739284483-ZmzKtFBB3qVEjMYfVzeWer6Gb8owYHmv-0-065a5ebec330f4271ba92d2cc34f0cdb)
从程序的输出结果可以看出,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=1739284483-UQt8k2HM9J5zGaKtBW31JwLqdv4oz7P1-0-4845930e04dca25c5e53eb6d529ee0ae)
在java.lang包中定义的RuntimeException类的直接子类及其功能说明如表5-5所示。
表5-5 RuntimeException类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T142_4584.jpg?sign=1739284483-nSd4Nl4pQZLedZVx0sYV4QDc6SEVucRe-0-621b67812c2dd4d80e0e3f2abfaa4fbd)
在java.lang包中定义IllegalArgumentException类的直接子类及其功能说明如表5-6所示。
表5-6 IllegalArgumentException类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T142_15153.jpg?sign=1739284483-ynHFqKO3BXlDCNQBW0etqrFZ7cU14U4e-0-cb6b42d4f0ab668363b18f7eaad6a86c)
在java.lang包中定义的IndexOutOfBoundsException类的直接子类及其功能说明如表5-7所示。
表5-7 IndexOutOfBoundsException类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T142_15154.jpg?sign=1739284483-JxlRCan8DwfxqzXNE582TZS6BrlnK7CJ-0-c913685611d204545202c976478e528c)
在java.lang包中定义的Error类的直接子类及其功能说明如表5-8所示。
表5-8 Error类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T143_4741.jpg?sign=1739284483-zainjlukmcwkmPZKi014mauEZHqLrflp-0-d4fd1c9ce1b1477b18dee6139c60a8f6)
在java.lang包中定义的LinkageError类的直接子类及其功能说明如表5-9所示。
表5-9 LinkageError类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T143_15156.jpg?sign=1739284483-uMrpheGkPivj92fKTQ3oP2YdvISCF0Ht-0-fa3e3daf1d0076b589fea075494cf182)
在java.lang包中定义的VirtualMachineError类的直接子类及其功能说明如表5-10所示。
表5-10 VirtualMachineError类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T143_4745.jpg?sign=1739284483-ZoFqDSO0VFfYSMAiBbGHiaWXm1hYTEJk-0-1dcf938ec7062861da6eda1d6bc3457e)
在java.lang包中定义的IncompatibleClassChangeError类的直接子类及其功能说明如表5-11所示。
表5-11 IncompatibleClassChangeError类的直接子类及其功能说明
![](https://epubservercos.yuewen.com/C12A92/16888495505349906/epubprivate/OEBPS/Images/Figure-T143_15157.jpg?sign=1739284483-XLHIin6JBNoqFXcVjIhk3gqjjkDUqlAS-0-deb7de7e0f0cf72961e326f9f0cb6af4)
在java.lang包中,所有Exception和Error类的异常子类的定义基本上与Exception和Error类的定义是一样的,它们都是重新构造了各自子类的构造方法,其子类的内部方法则是继承了父类的方法。
除java.lang包外,在Java的所有类库中,每个包都定义了与该包中类库实现功能相关的异常类,当Java虚拟机执行操作代码出现异常时,它会创建一个与异常相关的异常对象,在异常对象中包含有关异常的各种信息,然后将异常对象抛出,提供给应用程序进行捕获、修正、再抛出等相关处理。因此,在使用Java类库中类的方法时应注意方法抛出的异常,并根据异常信息再做相应的异常处理。