首页 理论教育 Java语言程序设计中的异常处理

Java语言程序设计中的异常处理

时间:2023-10-18 理论教育 版权反馈
【摘要】:在catch块中是对异常对象进行处理的代码,与访问其他对象一样,可以访问一个异常对象的变量或调用它的方法。在出现异常时,程序能自动捕获异常,并做出不同的处理,使程序继续运行下去。第22~25行代码捕获ArithmeticException异常并作出相应处理。

Java语言程序设计中的异常处理

当程序在运行过程中发生异常时,程序会被终止,这会给用户带来非常不好的体验。如用户在登录时,由于用户名输入错误了,程序就突然终止了,这时用户就会懵懵的,能不能在用户输入错误,程序发生异常时,程序还可以继续运行呢?这就是本节要讲的异常处理。

1.捕获异常

健壮的程序应该在异常发生时捕获(catch)异常对象,并执行相应的异常代码处理,使程序不会因为异常的发生而非正常终止或产生不可预见的结果。

在Java中,捕获异常是通过try-catch-finally语句实现的,其语法格式如下:

程序员根据经验来判断可能在运行过程中出现异常的语句,并将这些语句放置在try代码块中。每个try代码块可以伴随一个或多个catch语句,用于处理try代码块中所生成的异常事件。没有发生异常事件时,catch中的语句不会被执行。在catch块中是对异常对象进行处理的代码,与访问其他对象一样,可以访问一个异常对象的变量或调用它的方法。异常对象可以调用如下方法得到或输出有关异常的信息:

其中,第一个方法表示输出当前的错误信息,第二个方法表示输出当前的堆栈信息。

finally语句块中的代码无论是否发生异常都会被执行。finally语句是可选的。

try…catch…finally语句的使用示例如下:

上述代码的运行结果如下:

第8行代码中catch后面的参数可以是所有异常类的父类Exception。第9行代码是输出异常信息的。从运行结果可以看出,虽然程序发生异常了,但是finally语句块中的语句也被执行了。

下面我们通过一个例题,来感受下try…catch的使用。

【例5-5】 模拟求两个整数的商。

当用户从控制台输入两个整数的时候,可能会输入小数或者除数为0,此时在运行过程中就会出现“Input MismatchException”和“ArithmeticException”异常。在出现异常时,程序能自动捕获异常,并做出不同的处理,使程序继续运行下去。代码如下:

上述代码的运行结果如下:

第19~21行代码捕获Input Mismatch Exception异常并作出相应处理,第21行代码的作用是执行完第20行代码之后,让用户再次获取输入权限。(www.xing528.com)

第22~25行代码捕获ArithmeticException异常并作出相应处理。

2.抛出异常

除了上述讲到的用try…catch…finally捕获异常外,还可以使用throws关键字抛出异常,将异常抛给方法的调用者,调用者需要用try…catch…finally来捕获异常,或者调用者继续抛异常,如果没有方法来捕获异常,最后异常会被抛给虚拟机来捕获。

throws的使用示例如下:

上述代码的运行结果如下:

第4~8行代码定义了静态方法print,该方法抛出了异常Exception,throws可以抛出多个异常类,多个异常类中间用逗号隔开。

第11行代码在main方法中调用print方法,则main方法就是调用者,当调用本身抛出异常的方法时,调用者有两种处理手段,要么继续抛异常,要么捕获异常,而此处采用的是捕获异常,如第10~15行代码。

调用者抛出异常的使用示例如下:

上述代码的运行结果如下:

第9行中的throws Exception是调用者main方法继续抛出异常的处理。

从运行结果可以看出,main方法将异常抛给了JVM 处理,而JVM 处理异常的方法,就只能是捕获异常,输出异常信息。

除了throws方法抛出异常外,还可以显示地创建一个异常对象,并使用关键字throw 把异常对象抛给上一层,即程序的调用者,此时与throws不同,调用者不用捕获或抛出异常。throw 的使用示例代码如下:

上述代码的运行结果如下:

第7行代码通过throw 关键字抛出一个异常对象。第14行代码,main调用print方法时,既不需要捕获异常,也不需要抛出异常。

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

我要反馈