黑马程序员技术交流社区

标题: error和exception的区别,怎么用,请举例说明 [打印本页]

作者: 林铁柱    时间: 2012-2-8 09:49
标题: error和exception的区别,怎么用,请举例说明
本帖最后由 林铁柱 于 2012-2-8 17:08 编辑

error和exception的区别,怎么用,请举例说明
作者: 黑马唐浩    时间: 2012-2-8 09:56
Error类和Exception类都继承自Throwable类。
Exception异常有checked和unchecked之分。
并且通常是人为导致的。
而Error错误总是不可控的,经常用来表示系统错误等。程序员是处理不了的。
作者: 李泽霖    时间: 2012-2-8 10:00
Throwable 是所有 Java 程序中错误处理的父类 ,有两种资类: Error 和 Exception 。

   Error :表示由 JVM 所侦测到的无法预期的错误,由于这是属于 JVM 层次的严重错误 ,导致 JVM 无法继续执行,因此,这是不可捕捉到的,无法采取任何恢复的操作,顶多只能显示错误信息。

Exception :表示可恢复的例外,这是可捕捉到的。

Java 提供了两类主要的异常 :runtime exception 和 checked exception 。 checked 异常也就是我们经常遇到的 IO 异常,以及 SQL 异常都是这种异常。 对于这种异常, JAVA 编译器强制要求我们必需对出现的这些异常进行 catch 。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆 catch 块去处理可能的异常。

    但是另外一种异常: runtime exception ,也称运行时异常,我们可以不处理。当出现这样的异常时,总是由虚拟机 接管。比如:我们从来没有人去处理过 NullPointerException 异常,它就是运行时异常,并且这种异常还是最常见的异常之一。

    出现运行时异常后,系统会把异常一直往上层抛,一直遇到处理代码。如果没有处理块,到最上层,如果是多线程就由 Thread.run() 抛出 ,如果是单线程就被 main() 抛出 。抛出之后,如果是线程,这个线程也就退出了。如果是主程序抛出的异常,那么这整个程序也就退出了。运行时异常是 Exception 的子类,也有一般异常的特点,是可以被 Catch 块处理的。只不过往往我们不对他处理罢了。也就是说,你如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。

    如果不想终止,则必须扑捉所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。 在这个场景这样处理可能是一个比较好的应用,但并不代表在所有的场景你都应该如此。如果在其它场景,遇到了一些错误,如果退出程序比较好,这时你就可以不太理会运行时异常 ,或者是通过对异常的处理显式的控制程序退出。

异常处理的目标之一就是为了把程序从异常中恢复出来 。

作者: 最初的理想    时间: 2012-2-8 15:22
本帖最后由 最初的理想 于 2012-2-8 15:37 编辑

error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。
Java对异常进行了分类,不同类型的异常分别用不同的Java类表示,所有异常的根类为java.lang.Throwable,Throwable下面又派生了两个子类:Error和Exception,Error 表示应用程序本身无法克服和恢复的一种严重问题,程序只有死的份了,例如,说内存溢出和线程死锁等系统问题。Exception表示程序还能够克服和恢复的问题,其中又分为系统异常和普通异常,系统异常是软件本身缺陷所导致的问题,也就是软件开发人员考虑不周所导致的问题,软件使用者无法克服和恢复这种问题,但在这种问题下还可以让软件系统继续运行或者让软件死掉,例如,数组脚本越界(ArrayIndexOutOfBoundsException),空指针异常(NullPointerException)、类转换异常(ClassCastException);普通异常是运行环境的变化或异常所导致的问题,是用户能够克服的问题,例如,网络断线,硬盘空间不够,发生这样的异常后,程序不应该死掉。java为系统异常和普通异常提供了不同的解决方案,编译器强制普通异常必须try..catch处理或用throws声明继续抛给上层调用方法处理,所以普通异常也称为checked异常,而系统异常可以处理也可以不处理,所以,编译器不强制用try..catch处理或用throws声明,所以系统异常也称为unchecked异常。系统异常又称运行时异常,普通异常又称编译时异常。总的说出现error程序一定得终止,而出现Exception你还可以进行处理让程序不至于突然死掉。Exception就是程序没有按照你设定的那样运行,那么在这种情况下,就得给程序一个交待,使用exception能使我们把各种情况考虑得很周全,并作出相应的安排,从而保证了程序的健壮性。很多时候我们总是被动的处理异常,在实际开发中异常的处理有很多学问哦。详见方老师的javaweb视频。以上只是个人浅见
作者: 彭沛东    时间: 2012-2-8 15:39
error代表致命的错误 这个不是个人能处理的了得所以你也管不了
exception 是一些人为的错误比如 数组下标越界什么的 还有无法掌握的错误 比如读取文件的时候这个文件不存在  需要连接网络的时候网络不通之类
作者: 何洪森    时间: 2012-2-8 15:47
楼上说的已经很清楚了,我简单的说一下吧
Java中的Error和Exception都是来之Throwable 这个Class的,是它的子类(SubClass),
Error:是系统中的错误,程序员是不能改变,处理的,其实也就是JVM错误。
Exception:是在程序运行的时候捕捉的错误,是可以处理的异常.  通常使用
try...catch进行异常捕获。

作者: 毛溯澜    时间: 2012-2-8 16:58
Error 是 Throwable 的子类,用于指示合理的应用程序不应该试图捕获的严重问题。比如说内存不足

Exception 类及其子类是 Throwable 的一种形式,它指出了合理的应用程序想要捕获的条件。用try..catch处理或用throws声明




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2