天天看点

如何应用Java的throw验证数据

Scanner类验证数据的方法,和包装类的方法,如parseDouble()等,只是验证数据是否合法类型,或者对合法数据进行数值转换,但不能验证数据值是否超出规定的应用范围。例如,年龄age必须是从0到199之间的正整数。灵活应用throw语句,可以达到进一步验证数据是否超界的异常。

例1. 利用throw验证年龄age是否超界,并处理这个异常。

//完整程序见本书配套资源目录Ch5中名为ThrowExceptionTest.java

try {

     ageString = JOptionPane.showInputDialog("Please enter your age: ");

     age = Integer.parseInt(ageString);

     if (age < 0 )                  //age小于下界

        throw new Exception("Age less than 0 error!  Please try again. ");

     else if (age > 199)            //age大于上界

        throw new Exception("Age greater than 199 error!. Please try again. 

        ");

     ...

}

catch (NumberFormatException e) {

    System.out.println("Invalid entry.  Please enter an integer as your 

    age." );

}  

catch (Exception e) {

    System.out.println(e);

如同讨论过的,在这个例子中如果输入的age是非法整数,parseInt()将抛出NumberFormatException异常对象。但如果age小于0,利用throw抛出一个包含有数据小于下界错误信息的Exception异常对象;如果age大于199,则抛出一个包含有数据大于上界错误信息的Exception异常对象,达到进一步验证数据的目的。

我们也称系统抛出的异常,如parseInt()抛出的异常为隐性异常抛出;而利用throw语句抛出的异常为显性异常抛出。

例2.利用String类的isEmpty()方法,可以用来验证输入数据是否为空,即如果调用它的字符串长度为0,isEmpty()将返回真。这样可以产生更精确的异常处理信息。上面的例子可以修改为:

    ageString = JOptionPane.showInputDialog("Please enter your age: ");

    if (ageString.isEmpty())        //如果没有输入任何数据

        throw new Exception("Did not enter any data.  Please enter your

        age. ");

    ...

    }

    catch (Exception e) {

        System.out.println(e);

在以上例子中我们利用标准异常类Exception,“借花献佛”,创建一个有具体的、精确异常信息的对象,达到验证数据的目的。实际上,我们可以选择任何一个API提供的标准异常类,例如InputMismatchException等,取得同样异常处理效果。只要在创建这个异常对象时利用构造器设置自定义的异常信息即可。例如:

if (ageString.isEmpty())        //如果没有输入任何数据

    throw new InputMismatchException("Did not enter any data.  Please enter 

    your age. ");

...

catch (InputMismatchException e) {

本文转自高永强51CTO博客,原文链接:

http://blog.51cto.com/yqgao/172676 ,如需转载请自行联系原作者