学科分类
目录

什么是异常

尽管人人都希望身体健康、事事顺利,但在实际生活中总会遇到各种状况,例如感冒发烧,工作时电脑蓝屏、死机等。同样在程序运行的过程中,也会发生这种非正常状况,例如程序运行时磁盘空间不足、网络连接中断、被加载的类不存在等。针对这些非正常情况,Java语言中引入了异常,以异常类的形式对这些非正常情况进行封装,并通过异常处理机制对程序运行时发生的各种问题进行处理。

接下来通过一个案例来认识一下什么是异常,如文件1所示。

文件1 Example28.java

 1    public class Example28 {   
 2        // 下面的方法实现了两个整数相除
 3        public static int divide(int x, int y) { 
 4            int result = x / y;           // 定义一个变量result记录两个数相除的结果
 5            return result;                 // 将结果返回
 6        }
 7          public static void main(String[] args) {
 8            int result = divide(4, 0);   // 调用divide()方法
 9            System.out.println(result);    
 10        }
 11    }

运行结果如图1所示。

图1 运行结果

从图1可以看出,程序发生了异常,显示“java.lang.ArithmeticException: / by zero(被0除的算术运算异常)”的错误信息。异常提示信息已经非常明确,指出程序中出现了除以0的算术异常。由于程序中的第8行代码调用divide()方法时传入了参数0,所以在文件中的第4行代码的运算中出现了被0除的问题。在这个异常发生后,程序会立即结束,无法继续向下执行。

在文件1中,产生了一个ArithmeticException异常,ArithmeticException异常只是Java异常类中的一种,在Java中还提供了大量的异常类,这些类都继承自java.lang.Throwable类。

接下来通过一张图来展示Throwable类的继承体系,如图2所示。

图2 Throwable异常体系结构图

从图2可以看出,Throwable有两个直接子类Error和Exception,其中Error代表程序中产生的错误,Exception代表程序中产生的异常。接下来就对这两个直接子类进行解释说明。

● Error类称为错误类,它表示Java运行时产生的系统内部错误或资源耗尽的错误,是比较严重的,仅靠修改程序本身是不能恢复执行的,例如系统崩溃,虚拟机错误等。

● Exception类称为异常类,它表示程序本身可以处理的错误。在Java程序开发中进行的异常处理,都是针对Excption类及其子类的。在Exception类的众多子类中有一个特殊的RuntimeException类,该类及其子类用于表示运行时异常。除了此类,Exception类下所有其他的子类都用于表示编译时异常。

通过前面的学习,读者已经了解了Throwable类及其子类,为了方便后面的学习,接下来将Throwable类中的常用方法罗列出来,如表1所示。

表1 Throwable常用方法

方法声明 功能描述
String getMessage() 返回此throwable的详细消息字符串
void printStackTrace() 将此throwable及其追踪输出至标准错误流
void printStackTrace(PrintStream s) 将此throwable及其追踪输出到指定的输出流

表1中,这些方法都用于获取异常信息,由于Error和Exception继承自Throwable类,所以它们都拥有这些方法,读者在后面的异常学习中会逐渐接触到这些方法的使用。

点击此处
隐藏目录