一、概念
Java语言规范将自Error类或RuntimeException类衍生出来的任何违例都称作“不可检查”(Unchecked)异常;其他所有异常则称作“可检查”(Checked)异常。
所谓可检查异常,是指我们应该自行处理的异常。至于处理的手段,要么加以控制(try catch),要么通告(throws)他们有可能产生。通常,应捕捉那些已知如何处理的异常,而通告那些不知如何处理的异常。
而对那些不可检查异常来说,他们要么在我们的控制之外(Error),要么是我们首先就不该允许的情况(RuntimeException)。
异常的分类:
Error(不可检查):称为错误,由Java虚拟机生成并抛出,包括动态链接失败,虚拟机错误等,程序对其不做处理。
Exception(可检查):所有异常类的父类,其子类对应了各种各样的可能出现的异常事件,一般需要用户显示的声明或捕获。
RuntimeException(不可检查):一类特殊的异常,如被0除、数组下标超范围等,其产生比较频繁,处理麻烦,如果显示的声明或捕获将会对程序可读性和运行效率影响很大。因此由系统自动检测并将它们交给缺省的异常处理程序(用户可不必对其处理)。
二、自定义异常:
使用自定义异常一般有如下步骤:
1、通过继承java.lang.Exception类声明自己的异常类。
2、在方法适当的位置生成自定义异常的实例,并用throw语句抛出。
3、在方法的声明部分用throws语句声明该方法可能抛出的异常。
三、使用异常时的一些建议
1.异常控制的设计宗旨并不是用来代替一些简单的测试。只有在异常情况下才使用异常!
2.不要过分细化异常。不要在每个语句上都加上异常处理,最好将整个任务都放在try块内。如果其中有一项操作失败,可以随即放弃任务。
3.不要“压制”异常。对于需要通告异常的方法,我们可以改用捕捉的方法来将异常强行关闭,如果真的出现异常,那个异常会被“静悄悄”的忽略。如果觉得产生的异常会非常重要,就必须多费些功夫,对其进行正确的控制。
4.不要介意异常的传递。如果调用的方法会产生异常,比如readLine方法,他们天生就能捕捉自己可能产生的异常,在这种情况下,一种更好地做法是将这些异常传递出去,而不是自己动手来捕捉它。