异常与异常类

在开发中,不可避免的会遇见一些异常,今天分享一些异常的基本知识和对异常的处理及开发中的应用,供大家参阅一下,如有遗漏欢迎大家的补充。。。

1、异常的概念

        程序设计和开发中,发生错误是不可避免的,编程人员和编程工具在处理错误的能力很大程度上会影响工作的效率和质量。一般将错误分为三种类型:编译错误、运行时错误和逻辑错误。

    a、编译错误:指编写的代码不符合Java的语法标准,这种错误绝大部分是因为码农的粗心大意造成的,一般的编译工具都会有明显的提示出现。

    b、运行时错误:运行时错误也可以称之为运行时异常,也就是程序通过了编译,但是在运行的时候可能就抛出了异常,例如:空指针异常,下标越界异常等。

    c、逻辑错误:这种错误是指程序在设计时存在的缺陷,也就是通过了编译,运行也没有任何异常,但是程序运行后的结果,与我们的预期结果不符合,这种错误大家明白就好,因人而异,这就不讨论这个!

2、异常的抛出和捕获

    在java中异常都是在方法中产生的,如果某个方法产生了异常,那么对应的在这个方法中就会生成一个代表该异常的对象,然后将该对象交给运行时系统,运行时系统就寻找相应的代码来处理该异常。这个时候我们将该异常对象交给运行时系统的过程称为抛出异常(throw Exception)运行时系统在方法的调用栈中查找,从产生异常的方法开始向上回溯,直到找到包含相应异常处理的方法为止,这个回溯的过程我们称之为捕获异常(catch Exception)

3、Throwable类及其子类

    Java语言的异常处理采用面向对象的方法,因此我各种异常建立了类层次。Java中的异常都是Throwable类的子类对象,而Throwable类是Object类的直接子类。层次关系如下:

                                      异常与异常类

           Throwable类有两个子类,分别是error类和Exception类,这两个类对应的又有很多其他的子类。

        a、error类

            error类我们称之为系统内部异常,这样的错误其实很少出现,如果这类异常发生,除了终止系统外,我们什么都做不了,因为程序中我们并不对这个错误进行处理。

        b、Exception类

            对于Exception类我们又分为两种类型:运行时异常(RunTimeException)、非运行时异常。

        运行时异常:常见的有空指针异常,下标越界异常,类型转换异常,类找不到异常等。

        非运行时异常:就是我们必须捕获的异常,最容易理解的就是,我们在开发中使用的例如Thread.sleep()方法,在使用时必须捕获或声明抛出,否则连编译都不会通过,常见还有IOException异常。

         注意:为了避免程序正常的运行,要么就避免产生运行时异常,要么对运行时异常进行处理。

4、异常的处理

        对于我们刚说到的运行时异常,都会导致程序终止运行,为了避免这个情况的发生,所以必须对异常采取措施,一般对于异常的处理有两种方式:使用try-catch-finally结构捕获和处理异常、声明方法抛出异常,由调用方法来处理异常。

        a、try-catch-finally结构:try块中放入的是可能会产生异常的代码,catch块用来捕获异常,finally块是无论有无异常都会处理该块的内容

        注意:如果有多个catch块,排列顺序必须按照异常的类型从特殊到一般来排序,即子类异常必须在父类异常的前面,否则会有编译错误

        b、声明方法抛出异常:有时在一个方法中如果有异常我们也不用在本方法中就处理该异常,可以交给调用方来处理这个异常。

        注意:在前面我们提到过子类的可以覆盖父类的方法,但若父类的方法使用throws声明抛出了异常,子类的该方法也可以抛出异常,但是子类抛出的异常不能比父类多,并且异常的类型不能高于父类,但可以相同。

        以上就是对异常的一个简单明了的分析,如果有什么不对的地方,欢迎指针,一起学习,一起进步!!!