从字面意思看,exception是异常,异常并不是错误,很明显,异常是可以修正的。比如打开一个文件,用户选择了一个错误的路径时,程序会抛出FileNotFoundException的异常,这是告诉应用程序,文件没有找到,通过捕捉这个异常,程序可以提示用户文件未找到,程序会继续运行。而error是错误,是虚拟机或者操作系统的问题,它的出现表示出现了严重的问题,一般应用程序不应该捕捉它。
下面来看看java语言的异常的体系结构:
exception和error都是继承自Throwable,都是可以抛出的。这2个子类将java中可抛出的错误或者异常一分为二,exception代表正常的Throwable,error则代表反常的Throwable。两者抛出方式有点不同:抛出error的方法不需要对此进行声明(换句话说,这是一个unchecked exception)
VirtualMachineError,ThreadDeath,LinkageError是error的子类,你确定要捕捉这些错误吗?呵呵!
exception产生了各种各样的子类,其中RuntimeException(运行时异常),其子类有NullPointerException,ClassCastException和IndexOutOfBoundsException。他们跟error的表现一样,是不可控制的(unchecked exception)。
虽然unchecked exception能够catch,但是这只是一个不完整的解决办法。指不定程序的某个地方突然抛出一个呢,让人措手不及。不过有个办法可以处理这种情况,请参考如下代码。
总结:
Error和Exception都继承自Throwable,他们下列不同处:
Exceptions
1.可以是 可被控制(checked) 或 不可控制的(unchecked)。
2.表示一个由程序员导致的错误。
3.应该在应用程序级被处理 。
Errors
1.总是 不可控制的(unchecked)。
2.经常用来用于表示系统错误或低层资源的错误。
3.如何可能的话,应该在系统级被捕捉。