![Java无难事:详解Java编程核心思想与技术](https://wfqqreader-1252317822.image.myqcloud.com/cover/59/35011059/b_35011059.jpg)
8.1 什么是异常
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt008_2.jpg?sign=1739291836-EfRJimIG3DXi5MooTOBUh1lQ772Lnm5w-0-abfc6394c86f803806447e71200a5b0c)
扫码看视频
我们先看一段代码,如代码8.1所示。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt008_3.jpg?sign=1739291836-qqca1uKevjsqLSgyxyGRqlPB9N97FXud-0-6055a0b5630765a59c4b5f29a9dab840)
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt008_4.jpg?sign=1739291836-10liOWqUU6qYVjLwfXtTw1i6YWPvS9wV-0-8f077f3c98e4243e3f39831d57dd10e3)
这段代码很简单,在ExcepTest类中定义了一个实现整数除法运算的divide方法,在main方法中调用ExcepTest对象的divide方法,除数传递的是0,但是,我们都知道在除法运算中,除数是不能为0的。编译并运行该程序,程序果然报错,如图8-1所示。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt008_5.jpg?sign=1739291836-bXJ8m7tSnRl4NDOmoDaKQc4p62wxfdks-0-3d5d66f31993dbbf57704882d1ec11bc)
图8-1 除数为0引发的异常
从图8-1中可以看到,有一个java.lang.ArithmeticException类,这是一个异常类,代表了发生的一类错误,在类名后面给出了异常的描述信息:“/ by zero”。在Java中,打开一个不存在的文件、网络连接中断、数组下标越界、正在加载的类文件丢失等都会引发异常。如果Java程序在执行过程中出现异常,会自动生成一个异常类对象,该异常对象将被提交给Java运行时系统,这个过程称为抛出(throw)异常。Java运行时系统接收到异常后,会将异常对应的类名称、异常的描述、异常发生的位置跟踪信息都输出到System.err中,并终止程序的运行,如图8-1中所示。
Java中的异常类都是从java.lang.Exception类直接或间接派生而来的,而这个类又是从java.lang.Throwable继承而来的,图8-2展示了异常类的层次结构。
![img](https://epubservercos.yuewen.com/AD1899/18685354708165706/epubprivate/OEBPS/Images/txt008_6.jpg?sign=1739291836-s4lp0zxH0zfeHLsiRVMp02v4f3ebsAeK-0-2e6e594e4bea0545f86746b4091a3ab5)
图8-2 异常类的层次结构
当然,Java中的异常类有很多,并不仅限于图8-2中给出的这少数几个,这里只是给出了大致的继承体系结构。
从图8-2中可以看到,从Throwable继承的还有一个Error类,这个类定义了程序中不能恢复的严重错误,如内存溢出、类文件格式错误等。这一类错误由Java运行时系统处理,不需要我们去处理,我们也没有能力去处理。若发生这一类错误,程序就只能无奈地终止。
Exception这一分支定义了程序中遇到的“轻微”错误,这些错误是可以被捕获并进行处理的,从而让程序可以继续运行。