强烈推荐一个大神的人工智能的教程:http://www.captainbed.net/zhanghan
Error
一般指与虚拟机相关的问题,如系统崩溃、虚拟机错误、动态链接失败,这种错误属于JVM无法预期的错误,这是JVM层级的错误,发生时将会导致JVM无法继续执行,将会导致应用程序中断,所以就不存在捕获异常这一说法了。所以Error不用使用try...catch捕捉Error对线下,也不用在方法之后加throws抛出Error。
Exception
一般指本应用系统自己由于处理不当或其他原因造成的异常,是可恢复的。异常分为可检查异常和运行时异常。可检查异常包括我们平时见到的IO异常和SQL异常,这种异常编译器会强制要求我们catch这类异常。运行时异常,当出现这样的异常时,我们可以不去处理,这类异常一般是由程序员造成,常见的包括NullPointerException,类型转换异常,数组下标越界等,出现运行时异常时系统会向上抛,会一直抛到最上层。
异常类继承关系
异常处理规则
- 异常捕获时要先捕获小异常,后捕获大异常
- Java7之后支持多异常捕获,多个异常之间使用"|"相隔,异常变量使用隐式的final修饰,所以异常不能被重新赋值
- 异常只应该用于处理非正常的情况,不要使用异常处理来代替正常的流程控制
- 不要使用过于庞大的try块,一旦try块增大,那么出错的概率就会更大,我们在try块后需要紧跟对不同异常类型的处理,这样就增加了try块的判断逻辑,会降低效率
- 避免使用catch all语句,所有的异常采用同样的处理方式将导致无法对不同的异常分情况处理,如果要分情况处理需要在catch块中进行流程控制,这样就得不偿失了。
- 不要忽略捕获到的异常,当程序捕获到异常后,我们不应该仅仅采用输出的方式。