5.2.5 灵活应用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
大于上界
t
hrow new Exception("Age greater than 199 error!. Please try ag
ain.
") ;
") ;
...
}
catch (NumberFormatException e) {
System.out.println("Invalid entry. Please enter an integer as your
age." );
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()
将返回真。这样可以产生更精确的异常处理信息。上面的例子可以修改为:
try {
ageString = JOptionPane.showInputDialog("Please enter your age: ");
if (ageString.isEmpty()) //
如果没有输入任何数据
throw new Exception("Did not enter any data. Please enter your
age. ");
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. ");
your age. ");
...
}
catch (InputMismatchException e) {
System.out.println(e);
}
本文转自高永强51CTO博客,原文链接:
http://blog.51cto.com/yqgao/172676 ,如需转载请自行联系原作者