因小失大切莫轻视JAVA异常处理2008-02-13 13:51:16 来源:IT168.com 作者:火星人 点击:
常常会有一些程序员习惯在编程时拖延或忘记异常处理程序的编写。因为轻视异常这一坏习惯是如此常见,它甚至已经影响到了JAVA本身的设计。 ![]() JAVA异常处理是程序开发的一个重要内容,异常处理的好坏关系到系统的健壮性和稳定度。异常处理看起来只有几个常用语句,故有些开发人员常常会对异常处理轻视和在使用上思路模糊。近期笔者在一个开发项目中就体验到轻视异常处理的惨痛教训,因为对异常没有处理好,后果是严重影响系统稳定性。因此,笔者认为异常处理并不是表面看起来的那么简单。本文分享在此项目过程中对异常处理的一些看法。
一. 什么是异常 在JAVA程序运行时,我们常常会出现一些非正常的现象,这种情况称为运行错误。根据其性质可以分为错误和异常。JAVA用面向对象的方法处理异常,首先会建立类的层次。类 Throwable位于这一类层次的最顶层,只有它的后代才可以作为一个异常被抛弃。类Throwable有两个直接子类:Error和Exception。 一般来说错误最常见的有程序进入死循环,内存泄漏等。这种情况,程序运行时本身无法解决,只能通过其他程序干预。JAVA对应的类为Error类。Error类对象由JAVA虚拟机生成并抛弃(通常JAVA程序不对这类异常进行处理)。 异常是程序执行时遇到的非正常情况或意外行为。一般以下这些情况都可以引发异常:代码或调用的代码(如共享库)中有错误,操作系统资源不可用,公共语言运行库遇到意外情况(如无法验证代码)等等。常见的有数组下标越界,算法溢出(超出数值表达范围),除数为零,无效参数、内存溢出等。这种情况不像错误类那样,程序运行时本身可以解决,由异常代码调整程序运行方向,使程序仍可继续运行直至正常结束。 JAVA对应的类为Exception类。Exception类对象是JAVA程序处理或抛弃的对象。它有各种不同的子类分别对应于不同类型的异常。JAVA编译器要求程序必须捕获或声明所有的非运行时异常,但对运行时异常可以不做处理。其中类RuntimeException代表运行时由JAVA虚拟机生成的异常,原因是编程错误。其它则为非运行时异常,原因是程序碰到了意外情况,如输入输出异常IOException等 二. 异常处理程序的功效
当在程序运行过程中发生的异常事件,这些异常事件的发生将阻止程序的正常运行。为了加强程序的稳定性,程序设计时,必须考虑到可能发生的异常事件并做出相应的处理。因此, 异常处理程序就是能够让系统在出现异常的情况下恢复过来的程序。 JAVA通过面向对象的程序来处理异常。在一个程序的运行过程中,如果发生了异常,则这个程序生成代表该异常的一个对象,并把它交给运行时系统,运行时系统寻找相应的代码来处理这一异常。我们把生成异常对象并把它提交给运行时系统的过程称为抛出异常(Throw)。异常抛出后,运行时系统从生成对象的代码开始,沿程序的调用栈逐层回溯查找,直到找到包含相应处理的程序,并把异常对象交给该程序为止,这个过程称为捕获异常(Catch)。 为了使异常处理更出色地发挥它的功效,程序员需要对所有可能发生的异常,预制各式各样的异常类和错误类。它们都是从抛出异常类Throwable继承而来的,它派生出两个类Error和Exception。 由Error派生的子类命名为XXXError,其中词XXX是描述错误类型的词。由Exception派生的子类命名为XXXException,其中词XXX是描述异常类型的词。Error类处理的是运行使系统发生的内部错误,是不可恢复的,唯一的办法是终止运行程序。因此,一般来说开发人员只要掌握和处理好Exception类就可以了。对于运行时异常RuntimeException,我们没必要专门为它写一个异常控制器,因为它们是由于编程不严谨而造成的逻辑错误。只要出现终止,它会自动得到处理。需要开发人员进行异常处理的是那些非运行期异常。 相关文章: |