在还没有学习异常处理之前,如果您要撰写一个除法程序,并由使用者输入除数与被除数,由于被除数除以0没有意义,所以之前可能
必须像以下这样避免错误: if(b != 0) System.out.println(a / b); else System.out.println("除数不能为0"); 这样的方式过去在一些程序语言中会很常被利用,利用判断式来避免错误的发生,然而这样的方式会让错误处理与程序的处理逻辑混在一起,使得程序难以阅读,而 由于使用了一些判断式,即使有一些很少发生的错误,也都必须一视同仁的进行判断检查,这会使得程序的执行效能受到一定程度的影响。 Java的异常处理机制可以协助我们捕捉程序运行时的错误,它用来处理一些系统可以恢复的错误,异常(Exception)是Java中定义 的一种对象数据类型,在特定错误发生时会丢出异常对象,我们可以捕捉这些异常并加以处理,避免程序可能的错误发生。 Java的异常处理藉由"try"、"catch"、"finally"三个关键字组合的语言来达 到,其语法基本结构如下: try
{
// 陈述句 } catch (异常类型 名称) { // 异常处理 } finally { // 一定会处理的区块 } 一个"try"所包括的区块,必须有对应的"catch"区块,它可以有多个"catch"区域,而"finally"可有可无,如果没有定义 "catch"区块,则一定要有"finally"区块。 先来看个实例,了解如何使用try...catch来处理使用者输入的错误:
import java.io.*; 异常处理是程序在执行但发生错误并无法处理时,会丢出一个异常对象,在这个程序中,您特意 使用 BufferedReader 取得输入,当使用 BufferedReader类时,若发生I/O错误会丢出IOException 异常,这个异常您必须处理。 您试着从使用者输入取得一个整数值,由BufferedReader对象所读取到的输入是个字符串,您使用Integer类的 parseInt()方法试着剖析该字符串为整数,如果无法剖析,则会发生错误并丢出一个NumberFormatException异常对象,当这个异常丢出后,程序会离开目前执行的位置,而如果设定的"catch"有捕捉这个异常,则会执行对应区块中的陈述句,注意当异常一但丢出,就不会 再回到异常的丢出点了。 来看看这个程序的执行范例:
如果程序中设定有"finally"区块,则无论异常是否有发生,则一定会执行"finally"区块中所定义的陈述句, "finally"区块使用时机 的例子之一,就是当您开启了某个文件时,在读/写的过程中发生错误,在使用"catch"区块处理相对应的异常之后,最后在"finally"区块中定义 一些关闭文件的动作,让关闭文件的动作一定会被执行。 使用异常处理的好处是您可以将程序逻辑与错误处理分开,使得程序易于撰写、阅读与维护,由于异常处理是在程序执行时发生错误,而没有办法处理之时才产生异常对象,所以与使用判断式来避免异常的方式比起来,异常处理会有比较好的执行效能。 |