Java异常处理是指当Java程序出现错误时,程序如何处理,通过异常处理保障Java程序安全退出。
程序错误分为编译错误和逻辑错误。编译错误是指程序中的语法错误,通过编译程序来检测语法错误所在位置及错误原因。逻辑错误是指程序没有按照预期的逻辑顺序执行而导致最终的运行结果不正确。异常是指程序运行时发生的错误,而异常处理就是当运行发生错误时对错误进行妥善的处理,不至于程序的执行直接被中断。
在Java中,对在运行时出现的异常现象进行封装,定义成相应的异常类。Java的异常体系结构包含在java.lang这个包中,该包为默认包,在使用时不需要导入。在Java中,所有的异常类和错误类都直接或间接的从 Throwable类继承。Throwable有两个直接子类—— Error(错误)类和Exception(异常)类,异常可以处理,而错误是无法通过程序进行处理的,因此Java中的异常处理是指对发生的Exception子类异常进行的处理,而异常(Exception)又分为运行时异常和非运行时异常。在Java中非运行异常必须要使用try-catch进行处理,否则会报语法错误,而发生运行时异常即RuntimeException及其子类异常时在程序中可处理也可不处理,发生运行时异常时不处理编译器也不会报错。Java异常体系如图6.1所示。
图6.1 Java异常体系
1.Throwable
Throwable 有两个重要的直接子类,Exception(异常)和Error(错误),二者都是Java Throwable的重要子类,Exception和Error都包含了大量子类,通过Java的API文档可获知。异常和错误的区别是异常可以处理,而错误是无法通过程序进行处理。Trowable类中,异常对象可以调用如下方法得到或输出有关的异常信息:
public string getMessage();//返回异常发生时的详细信息
public string toString();//返回异常发生时的简要描述
public void printStackTrace();//在控制台上打印Throwable对象封装的异常信息
2.Error(错误)(www.daowen.com)
在Java中,程序无法处理的错误通过Error的子类描述,Error指的是一个合理的应用程序不能截获的严重的问题。大多数错误是因为Java 虚拟机出现的问题。例如,Java虚拟机运行错误(VirtualMachineError),当JVM(Java 虚拟机)没有足够的程序执行所需的内存资源时,将出现内存溢出 OutOfMemoryError错误。通常这样的异常发生时,JVM一般会终止线程的执行。因此VirtualMachineError、OutOfMemoryError这些错误无法通过程序代码进行处理,这类错误在应用程序的控制和处理能力之外,因此对于设计合理的应用程序来说,即使发生了这些错误(Error),也不需要去处理Error所引起的异常状况,而且编程人员也无法处理这样的错误。
3.Exception(异常)
Exception是可以通过程序代码处理的异常。
Exception(异常)分两大类:运行时异常和非运行时异常。其中非运行时异常又称为编译异常,程序中需要尽可能去处理这些异常。
1)运行时异常(RuntimeException)
RuntimeException 类是Exception类的一个重要的子类,是非受检异常,运行时异常都是RuntimeException类及其子类所对应的异常。RuntimeException 类及其子类异常表示JVM的常用操作引发的异常。如:用空值对象引用成员变量和成员方法、除数为零或数组下标越界,会分别引发NullPointerException、ArithmeticException和 ArrayIndexOutOfBoundException运行时异常。编译器不检查这些异常,在程序中可以捕获处理,也可以不处理,如若程序中没有处理则由JVM自行处理,Java Runtime会自动捕获到程序抛出的RuntimeException,然后停止线程,同时打印异常。运行时异常多因为程序逻辑错误引起,程序编写人应多从逻辑角度检查并尽可能避免运行时异常的发生。
运行时异常的特点是Java编译器不会检查,即当程序中可能出现这类异常时,如用throw子句声明抛出了运行时异常对象,没用try-catch语句捕获时,也不会出现编译错误。
2)非运行时异常(编译异常)
非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类,是编译异常,或称之为受检异常,即从程序语法角度讲是必须进行捕获处理或向上抛出的异常,若不处理,程序会出现编译错误。如FileNotFoundException、ClassNotFoundException等异常以及用户自定义的从Exception派生的异常类。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。