首页 > Linux操作系统 > Linux操作系统 > java exception
Error类和Exception类
Error类
Error类及其子类通常用来描述Java运行系统中的内部错误以及资源耗尽的错误。Error类表示的异常比较严重,仅靠修改程序本身是不能恢复执行的,被称为致命性类。举一个现实中的例子,如因施工时偷工减料,导致学校教学楼坍塌,此时就相当于发生了一个Error异常。在大多数情况下,发生该异常时,建议终止程序。
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异常类列表
下面对表1中一些常见的不检查异常进行简要介绍。
ArithmeticException类
该类用来描述算术异常,例如在除法或求余运算中规定,除数不能为0,所以当除数为0时,则Java虚拟机抛出该异常。例如:
int num=9%0; //除数为0,抛出ArithmeticException异常
NullPointerException类
用来描述空指针异常,当引用变量值为null,试图通过“.”操作符对其进行访问时,抛出该异常。例如:
Date now=null; //声明一个Date型变量now,但不引用任何对象
String today=now.toString(); //试图通过“.”操作符进行访问,抛出NullPointerException异常
l NumberFormatException类
用来描述字符串转换为数字时的异常。当字符串不是数字格式时,若将其转换为数字,则抛出该异常。例如:
String strage="24L";
int age=Integer.parseInt(strage); //试图将“24L”转换为int型时,抛出NumberFormatException异常
l IndexOutOfBoundsException类
该类用来描述某对象的索引超出范围时的异常,其中ArrayIndexOutOfBoundsException类与StringIndexOutOfBoundsException类都继承自该类,它们分别用来描述数组下标越界异常和字符串索引超出范围异常。
例如,下面为抛出ArrayIndexOutOfBoundsException异常的情况:
int[] a=new int[3]; //定义一个数组,有3个元素a[0]、a[1]和a[2]
a[3]=9; //试图对a[3]元素赋值,抛出ArrayIndexOutOfBoundsException异常
下面为抛出StringIndexOutOfBoundsException异常的情况:
String name="MingRi";
char c=name.charAt(name.length()); //抛出StringIndexOutOfBoundsException异常
l ArrayStoreException类
该类用来描述数组试图存储类型不兼容的值时的异常。例如,对于一个Integer型数组,试图存储一个字符串,将抛出该异常:
Object[] num=new Integer[3]; //引用变量num引用Integer型数组对象
num[0]=MR; //试图存储字符串值,抛出ArrayStoreException异常 l ClassCastException类 该类用来描述强制类型转换时的异常。例如,强制转换String型为Integer型,将抛出
num[0]="MR"; //试图存储字符串值,抛出ArrayStoreException异常
l ClassCastException类
该类用来描述强制类型转换时的异常。例如,强制转换String型为Integer型,将抛出该异常:
Object bj=new String("100"); //引用变量obj引用String型对象
Integer num=(Integer)obj; //强制转换obj为Integer类型,抛出ClassCastException异常
2.RuntimeException之外的异常
RuntimeException之外的异常用来描述发生的意外的事情。例如,一个记者根据一个地址去采访一个重要人物,此时就会抛出该类异常:根据地址没有找到被采访的人或采访被拒绝。该类异常被称为检查异常(check exception),要求必须通过try-catch语句捕获或由throws关键字抛出,否则编译出错。
Java中提供的常见的检查异常如表2所示,每一个类都表示了具体的一种检查异常类型。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/22117706/viewspace-625888/ ,如需转载,请注明出处,否则将追究法律责任。