理论教育 Java程序设计:throw和throws异常

Java程序设计:throw和throws异常

时间:2023-10-18 理论教育 版权反馈
【摘要】:而异常的抛出有三种形式,分别是系统自动抛出异常和在程序代码中用throw抛出异常对象,以及用throws声明方法体中可能抛出的异常类型。程序中用try-catch-finally进行异常捕获并处理。本例介绍了用throw抛出异常对象的语法格式,用throw手动抛出异常更多用于抛出自定义异常,自定义异常在下一节中介绍。而throws声明抛出的异常类型,所以在throws后面跟的是异常类名称,一个方法可以用throws声明可能抛出的多个异常类,其间用逗号分隔。

Java程序设计:throw和throws异常

异常处理存在两个过程,一个是捕捉异常,另一个是抛出异常。捕捉异常是用try把可能会发生异常的代码块包起来,而用catch去捕捉try语句块中可能发生的异常,并处理所捕捉到的异常,最后用finally语句块进行如关闭文件、断开与数据库连接等之类的清理工作。而异常的抛出有三种形式,分别是系统自动抛出异常和在程序代码中用throw抛出异常对象,以及用throws声明方法体中可能抛出的异常类型。系统定义的所有运行时异常和编译异常都可能在程序运行过程中发生并由系统抛出,而用throw和throws关键字既可以抛出系统定义的异常也可以抛出自定义的异常。

1.throw用于在语句中抛出一个异常对象

如果在方法体中不想系统自动抛出异常,而想实现编程人员控制抛出系统异常对象或自定义异常对象,则只能使用 throw 语句。注意throw语句抛出的不是异常类型,而是一个异常实例对象,并且一次只能抛出一个异常对象。一旦执行到throw抛出异常对象时,则从throw位置转向到捕捉该异常的catch块去执行,如果当前方法中没有进行捕获,就会跳转到其上一级方法调用者中去处理,以此类推,若都未进行处理,系统结束程序的执行。throw语句的语法格式如下:

throw ExceptionInstance;

【例6.17】在Example6_17类中,定义了一个div方法,在方法体中实现输入两个整数,对这两个整数进行除法运算,当输入的num2的值为0时,用throw语句手动抛出Arithmetic Exception异常对象。程序中用try-catch-finally进行异常捕获并处理。

当然,ArithmeticException异常是系统定义的异常,如果出现除数为0的情况,程序中不用throw抛出也会自动抛出。本例介绍了用throw抛出异常对象的语法格式,用throw手动抛出异常更多用于抛出自定义异常,自定义异常在下一节中介绍。

在Java程序运行过程中,如果发生异常并被catch块捕捉,则会中止当前try语句块的执行,转向捕捉到该异常对应的catch块去处理异常。因此系统自动抛出的异常与在程序中用throw手动抛出的异常处理机制是没有区别且一致。(www.daowen.com)

如果throw语句抛出的异常是运行时异常,程序既可以使用try-catch来捕获并处理该异常,也可以完全不理会该异常,把该异常交给该方法调用者处理。如果throw语句抛出的异常是编译异常,则该throw语句要么处于try块中,同时让try后的catch块显式捕获该异常;要么放在一个带throws声明抛出该异常类型的方法中,把该异常交给方法的调用者处理。因此throw抛出编译异常时,throw要么和try-catch-finally语句配套使用,要么与用了throws声明抛出该异常类型的方法配套使用。

2.用throws声明方法可能抛出的异常类型

throws用于方法的声明,表示所声明的方法有可能要抛出throws后面的异常类型对象。调用了用throws声明了异常的方法必须要做异常处理。其语法格式如下:

在方法中若使用了throw抛出了一个编译异常,则在该方法中需要使用try-catch-finally语句进行异常捕获处理,若没有用try-catch语句块进行处理,则需要在该方法的首部用throws声明在方法体中可能抛出的异常类型,在调用该方法的方法体中对抛出的异常进行处理或者交给其上一级调用者进行处理,如若不处理会报编译错误。

throw是具体向外抛异常的动作,所以它抛出一个异常实例,一次只能抛出一个异常对象。而throws声明抛出的异常类型,所以在throws后面跟的是异常类名称,一个方法可以用throws声明可能抛出的多个异常类,其间用逗号分隔。

【例6.18】在程序Example6_18中的div()方法体内用throw抛出了ArithmeticException异常对象,但在方法体中未用try-catch进行处理,而是在div()方法首部用throws声明了div()方法可能会抛出ArithmeticException、InputMismatchException两种异常,将异常的捕获和处理交由上一级即调用div()方法的main()方法中去处理,因此在main()方法中,用try-catch语句块分别捕获ArithmeticException、InputMismatchException两种异常对象。如果在主方法中还不想捕获处理异常div()中声明的异常,则可以在main()首部用throws声明可能抛出的ArithmeticException、InputMismatchException两种异常,交由系统进行处理。本例中所抛出的异常是运行异常,不是编译异常,因此对异常不做捕获处理,编译也不会错,如果是编译异常或自定义异常,则必须要对异常进行捕获处理。

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

我要反馈