Hello,大家好呀,上一周提到的是list集合的实现类中的ArrayList,本周我们要讲的是异常及其知识。
异常的种类
Java通过API中的Throwable类的众0多子类描述各种不同的异常,所以Java异常是Throwable子类的实例化对象。Throwable有两个重要的子类:Exception(异常)和Error(错误)。二者都是Java异常处理的重要子类,各自又都包含大量子类。
(1)Error
从技术上讲,Error类及其子类对象不是异常,它们代表了程序运行时Java系统内解错误,与程序设计者的操作无关。Error是不可查的,因为它们在应用程序的控制和处力之外,而且绝大多数是程序运行时不允许出现的状况,程序设计者无能为力,因此不理它们。
(2)Exception
Exception通常是由于某个资源不可用,或者正确执行程序所需的条件不满足所造成的.是程序本身可以处理的异常,程序设计者应尽可能加以处理的部分。
Java将异常类 Exception分为两类:运行时异常(RuntimeException,也称为未检查异常和非运行时异常(也称为已检查异常)。运行时异常包含Java. Lang.RunTimeException类以及所有子类,除此之外的属于Exception类及其子类的所有异常都属于非运行时异常。
运行时异常(RuntimeExcepion及其子类)和错误(Error)都属于不可查异常,即编译器不要求强制处置的异常,然而对于非运行时异常,编译器会强制要求进行处理。
异常的捕获与处理
完整的异常捕获处理由try-catch-finally语句实现,其做法是将程序的业务功能代码放在try语句块中,尝试是否能顺利通过,将异常代码放在catch语句块中,捕获并处理异常,try-catch协同工作,这是Java的异常处理方式。其中finally语句块是一定会执行的代码,同时也是可选语句块。假设执行try语句块抛出异常,程序马上转到匹配成功的catch语句块执行,完成后会去执行finally语句块,结束后再去执行后续代码。假设执行try语句块未抛出任何异常,则程序跳过所有的catch语句块,但是仍然会执行finally语句块,完成后再去执行后续程序。
抛出异常
如果当前方法不知道如何处理捕获的异常,用throws声明将此异常再次抛出,交给方法的上一层调用者:假设上层方法仍然不知道如何处理,也可以继续向上抛出;直到某个方法可以处理此异常,或者最终将其交给JVM。异常对象沿着方法调用链进行反向传递,JVM对异常处理方法是打印异常的跟踪信息栈,并终止程序运行。
用户程序自定义的异常和应用程序特定的异常,必须借助于throw和throws语句来抛出异常。那么throws和throw是如何抛出异常的呢?
(1)throws语句
throws用在声明方法时,表示该方法可能要抛出异常,调用者必须作出处理,捕获或继续抛出异常。
throws 写在方法签名之后,语法格式如下:
(修饰符)(返回值类型)(方法名)(参数列表) throws Exceptionl,Exception2… …
Java规定,子类方法重写父类方法时,子类方法抛出的异常类型不能比父类方法抛出的异常类型更宽泛。也就是说,子类方法可以:
1、抛出与父类方法相同的异常。
2、抛出父类方法抛出的异常的子类。
3、不抛出异常,进行异常的捕获与处理。
(2)throw语句
Java异常体系中的异常都是在运行时由系统抛出的,用户自定义的异常必须自行抛出。自行抛出异常使用throw语句,它抛出的不是异常类,而是异常对象,每次只能抛出一个异常对象。一旦执行throw语句,其后的代码都不会被执行。
throw的语法格式如下:
throw 异常对象;
好啦,今天的分享就到这里了,希望能给有需要的朋友们一些帮助,有错误的话还请大家指正。