1.所谓异常,是指程序在运行过程中出现的不正常情况或错误。为了加强程序的健壮性,程序设计时必须考虑程序在运行时可能发生的异常情况,并作出相应的处理。在用传统的语言编程时,程序员只能通过函数的返回值来发出错误的信息,这易于导致很多错误。而在Java语言中,通过面向对象的方法来处理程序运行时的异常。当出现异常情况时,一个Exception对象就产生了,并交由异常处理程序处理,异常处理程序是使程序得以恢复正常运行的处理过程。
Java的异常处理机制描述如下:在一个方法的运行过程中,如果发生了异常,
- 则这个方法(或者是Java虚拟机)生成一个代表该异常的对象(它包含了异常的详细信息),并把它交给运行时系统,运行时系统寻找相应的代码来处理这一异常。把生成异常对象并把它交给运行时系统的过程称为抛出一个异常。
- 运行时系统寻找相应的代码来处理这一异常,系统在方法调用栈中查找,从产生异常的方法开始进行回朔,沿着被调用的顺序往前寻找,知道找到包含相应处理程序的方法为止。这一过程成为捕捉一个异常。
2.Java的异常是一个对象,所有异常都直接或间接地继承Throwable类。Throwable类是所有异常的超类。它有两个子类Error和Exception。
(1)Error类及其子类由Java虚拟机生成并抛出,包括动态链接失败、虚拟机错误等。Java程序不应捕捉这些异常。
(2)Exception类及其子类(RuntimeException和IOException)代表Java程序中可能发生的异常,并且应用程序可以捕捉这些异常。
Java将异常分为两种类型:编译时检查性异常和非检查性异常(又称运行时异常)。对于检查性异常,在程序中必须对其进行处理,否则编译器会指出错误。对于非检查性异常,程序中可以不做处理,直接由运行时系统来处理。编译器要求Java程序必须捕捉或声明所有的编译时异常(或称非运行时异常)。
Runtime Exception异常是Java虚拟机在运行时生成的异常,其产生比较繁琐,处理麻烦,对程序可读性和运行效率影响较大。因此由系统监测,用户可不做处理,系统将它们交给缺省的异常处理程序。当然,必要时用户可对其进行处理。
在Java类库中每个类包都定义了异常类,这些异常类分为两大类——Error类及Exception类,后者是java程序中需要大量处理的。除了java类库所定义的异常类之外,用户也可以通过继承已有的异常类(一般从Throwable或Exception类继承)来定义自己的异常类,并在程序中使用。