异常,又称例外,是指程序运行过程中出现的非正常现象。例如:用户输入错误、除数为零、需要处理的文件不存在、数组下标越界等。由于异常情况总是不可避免的,良好的应用程序除了具备用户所需求的基本功能外,还应具有预见并处理可能发生的各种异常的功能。引入了异常处理。
用面向对象的方法处理异常,就必须建立类的层次。在Java中,Throwable是所有可以通过throw抛出或catch捕获错误的基类。Throwable 对象有两个直接子类对象:Error类和Exception类。Error类用来表示编译错误和系统错误,如虚拟机错误、装载错误、动态链接错误,这类异常主要与硬件、运行系统有关,与程序本身无关,因此不需要捕获,特殊情况例外。Exception类用来表示可以被抛出异常的基类和用户自定义异常类。
所有的异常都由Throwable或者其子类的一个对象来表示,这种对象可用于把信息从常发生点传递到捕获点得处理程序中。异常句柄由try语句块中得catch子句建立。在处理异常的过程中,Java VM把当前线程中已开始运行但尚未结束的表达式、语句、方法、构造方法调用、静态初始化或域初始化表达式连续终止掉。这个过程一直继续下去,直到发现了一个异常句柄,该句柄通过指定异常的类或异常类的超类来声明它能处理该异常。如果未发现这样的句柄,就调用当前线程的父线程ThreadGroup的方法uncaught Exception,从而尽可能避免异常逃过处理。
异常处理的原则:Java异常处理结构由try,catch,finally三个块组成。其中try块存放将可能发生异常的Java代码,并管理相关的异常指针;catch块紧跟在try块后面,用来激发被捕获的异常;finally块包含清除程序没有释放的资源,句柄等。不管try块中的代码如何退出,多将执行finally块