首页 理论教育 语句抛出的异常

语句抛出的异常

时间:2022-02-28 理论教育 版权反馈
【摘要】:异常既可以在发生异常情况时由运行系统引发,也可以在程序中用throw语句显式引发。下面是包含throws子句的方法定义的语法格式:分析与思考:程序抛出异常后,add()本方法和调用者main()方法都不处理该异常,即程序中没有方法处理该异常。throw语句是抛出异常对象;throws子句是声明被抛出的异常对象在本方法中不作处理,而由该方法的调用者去处理。

8.3.2 throw语句抛出的异常

异常既可以在发生异常情况时由运行系统引发,也可以在程序中用throw语句显式引发。throw语句的一般格式如下:

throw 异常对象;

用throw语句抛出异常的一般过程是:

(1)指定或定义一个合适的异常类;

(2)产生这个类的对象并立即用throw抛出它。

【例8-5】 抛出不受检查的异常举例。小学生不会负数加法。当遇到负数加法时抛出异常对象。

img504

img505

程序运行结果:

img506

分析与思考:程序正确地执行了2+3的运算。由于-2是负数,所以,程序抛出异常对象。又由于程序没有处理该异常的代码块,所以,程序不作任何处理,终止执行。由于ArithmeticException是不受检查异常,所以,虽然没有异常处理代码块,编译也能通过。

【例8-6】 抛出受检查的异常举例。

img507

例8-6与例8-5基本相同,只是add方法抛出的是一个受检查的异常,但它没有异常处理代码,所以不能通过编译。

如果一个方法引发的是受检查的异常且自己没有处理,那么它必须用throws子句声明抛出,将异常抛给方法调用者去处理;如果该方法的调用者也不对异常进行处理,那么也必须用throws子句声明抛出,再将该异常抛给上一层的方法调用者去处理。下面是包含throws子句的方法定义的语法格式:

返回类型 方法名(参数列表)throws例外类型列表{...}

【例8-7】 抛出受检查的异常,并用throws子句声明抛出举例。

img508

程序运行结果:

img509

分析与思考:程序抛出异常后,add()本方法和调用者main()方法都不处理该异常,即程序中没有方法处理该异常。所以,系统调用默认的异常处理代码后终止程序执行。

模仿例8-7:对小学生减法运算进行编程。当遇到被减数小于减数时抛出异常对象。

小结 无论是受检查的异常还是不受检查的异常,异常一旦抛出,其处理过程是一致的,即:在方法调用栈中,Java虚拟机使异常沿着方法调用的反方向传播,寻找并转入合适的异常处理代码执行。如果方法及其所有的调用者都没有提供合适的处理代码,那么Java虚拟机调用默认的异常处理代码后终止程序执行,即打印来自方法调用栈的异常信息,如果该线程不是主线程,那么终止这个线程,其他线程继续正常运行。如果该线程是主线程,那么整个应用程序被终止。

注意:(1)throw语句与throws子句的区别。throw语句是抛出异常对象;throws子句是声明被抛出的异常对象在本方法中不作处理,而由该方法的调用者去处理。

(2)throw语句一般应放入分支语句中,表示仅在满足一定条件后才被执行,而且throw语句后不允许有其他语句,否则将出现编译错误信息:unreachable statement。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈