2024年3月7日发(作者:)

Exception类

Exception类称为非致命性类,它代表了另一种异常。发生该异常的程序,可以通过捕获处理后正常运行,保持程序的可读性及可靠性。在开发Java程序过程中进行的异常处理,主要就是针对该类及其子类的异常处理。对程序中可能发生的该类异常,应该尽可能进行处理,以保证程序在运行时,能够顺利执行,而不应该在异常发生后终止程序。

Exception类又根据错误发生的原因分为两种异常类型:RuntimeException异常和Runtime Exception之外的异常。

1.RuntimeException异常

RuntimeException异常也称为不检查异常(unchecked exception),是程序员编写了错误的程序导致,修改了该错误后,程序就可以继续执行。例如,学校制定校规,若有学生违反了校规,就相当于发生了一个RuntimeException异常。在程序中发生该异常的情况包括除数为0的运算、数组下标越界、对没有引用任何对象的变量进行操作等。当RuntimeExeption类或其子类所描述的异常发生后,可以不通过try-catch、throws语句捕获或抛出,在编译时是可以通过的,只是在运行时由Java虚拟机来抛出。

Java中提供的常见的RuntimeException异常如表1所示,这些异常类都是Runtime

Exception类的子类,表示了具体的一种不检查异常类型。

表1 RuntimeException异常类列表

异常类名称

ArithmeticException

ArrayStoreException

ClassCastException

IndexOutOfBoundsException

NegativeArraySizeException

NullPointerException

NumberFormatException

SecurityException

算术异常类

将与数组类型不兼容的值赋值给数组元素时抛出的异常

类型强制转换异常类

当某对象(如数组或字符串)的索引超出范围时抛出该异常

建立元素个数为负数的数组异常类

空指针异常类

字符串转换为数字异常类

小应用程序(Applet)执行浏览器的安全设置禁止的动作时抛出的异常

异常类含义

ArrayIndexOutOfBoundsException

数组下标越界异常类

StringIndexOutOfBoundsException

字符串索引超出范围异常

下面对表1中一些常见的不检查异常进行简要介绍。

 

ArithmeticException类

该类用来描述算术异常,例如在除法或求余运算中规定,除数不能为0,所以当除数为0时,则Java虚拟机抛出该异常。例如:

int num=9%0; //除数为0,抛出ArithmeticException异常

 

NullPointerException类

用来描述空指针异常,当引用变量值为null,试图通过“.”操作符对其进行访问时,抛出该异常。例如:

Date now=null;

String today=ng();

NullPointerException异常

//声明一个Date型变量now,但不引用任何对象

//试图通过“.”操作符进行访问,抛出

 

NumberFormatException类

用来描述字符串转换为数字时的异常。当字符串不是数字格式时,若将其转换为数字,则抛出该异常。例如:

String strage="24L";

int age=nt(strage); //试图将“24L”转换为int型时,抛出NumberFormatException异常

 

IndexOutOfBoundsException类

该类用来描述某对象的索引超出范围时的异常,其中ArrayIndexOutOfBoundsException类与StringIndexOutOfBoundsException类都继承自该类,它们分别用来描述数组下标越界异常和字符串索引超出范围异常。

例如,下面为抛出ArrayIndexOutOfBoundsException异常的情况:

int[] a=new int[3];

a[3]=9;

//定义一个数组,有3个元素a[0]、a[1]和a[2]

//试图对a[3]元素赋值,抛出ArrayIndexOutOfBoundsException异常

下面为抛出StringIndexOutOfBoundsException异常的情况:

String name="MingRi";

char c=(()); //抛出StringIndexOutOfBoundsException异常

 

ArrayStoreException类

该类用来描述数组试图存储类型不兼容的值时的异常。例如,对于一个Integer型数组,试图存储一个字符串,将抛出该异常:

Object[] num=new Integer[3]; //引用变量num引用Integer型数组对象

num[0]="MR"; //试图存储字符串值,抛出ArrayStoreException异常

 

ClassCastException类

该类用来描述强制类型转换时的异常。例如,强制转换String型为Integer型,将抛出该异常:

Object obj=new String("100");

Integer num=(Integer)obj;

ClassCastException异常

//引用变量obj引用String型对象

//强制转换obj为Integer类型,抛出2.RuntimeException之外的异常

RuntimeException之外的异常用来描述发生的意外的事情。例如,一个记者根据一个地址去采访一个重要人物,此时就会抛出该类异常:根据地址没有找到被采访的人或采访被拒绝。该类异常被称为检查异常(check exception),要求必须通过try-catch语句捕获或由throws关键字抛出,否则编译出错。

Java中提供的常见的检查异常如表2所示,每一个类都表示了具体的一种检查异常类型。

表2 常见检查异常类列表

异常类名称

ClassNotFoundException

EOFException

FileNotFoundException

IllegalAccessException

InstantiationException

IOException

为找到相应类异常

文件已结束异常类

文件未找到异常类

访问某类被拒绝时抛出的异常

试图通过newInstance()方法创建一个抽象类或抽象接口的实例时抛出该异常

输入输出异常类

异常类含义

NoSuchFieldException

NoSuchMethodException

SQLException

字段未找到异常

方法未找到异常

操作数据库异常类