如何应用Java的throw验证数据

简介:

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." );
}  
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. 
");
    ...
    }
    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) {
    System.out.println(e);
}

 


















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

http://blog.51cto.com/yqgao/172676  ,如需转载请自行联系原作者
相关文章
|
2天前
|
Java 编译器 开发者
Java一分钟之-Java注解的理解与应用
【5月更文挑战第12天】本文介绍了Java注解的基础知识和常见应用,包括定义、应用和解析注解。注解在编译检查、框架集成和代码生成等方面发挥重要作用。文章讨论了两个易错点:混淆保留策略和注解参数类型限制,并提供了避免策略。提醒开发者避免过度使用注解,以保持代码清晰。理解并恰当使用注解能提升代码质量。
12 3
|
2天前
|
Java API 开发者
Java中Lambda表达式的深入理解与应用
【5月更文挑战第12天】在Java 8之后,Lambda表达式已经成为了Java开发者必备的技能之一。Lambda表达式以其简洁、灵活的特点,大大提高了编程的效率。本文将深入探讨Lambda表达式的基本概念,语法规则,以及在实际开发中的应用,帮助读者更好地理解和使用Lambda表达式。
|
3天前
|
SQL Java
java处理数据查看范围
java处理数据查看范围
|
5天前
|
算法 安全 Java
深入探索Java中的并发编程:CAS机制的原理与应用
总之,CAS机制是一种用于并发编程的原子操作,它通过比较内存中的值和预期值来实现多线程下的数据同步和互斥,从而提供了高效的并发控制。它在Java中被广泛应用于实现线程安全的数据结构和算法。
21 0
|
6天前
|
传感器 机器人 Java
使用Java构建机器人应用
使用Java构建机器人应用
10 0
|
6天前
|
分布式计算 负载均衡 Java
构建高可用性Java应用:介绍分布式系统设计与开发
构建高可用性Java应用:介绍分布式系统设计与开发
11 0
|
6天前
|
设计模式 算法 Java
设计模式在Java开发中的应用
设计模式在Java开发中的应用
18 0
|
6天前
|
数据采集 机器学习/深度学习 Java
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
本文介绍了如何使用Java和Apache HttpComponents库从Facebook获取图像数据。通过设置爬虫代理IP以避免限制,利用HttpClient发送请求,解析HTML找到图像链接,然后下载并保存图片。提供的Java代码示例展示了实现过程,包括创建代理配置、线程池,以及下载图片的逻辑。注意,实际应用需根据Facebook页面结构进行调整。
数据猎手:使用Java和Apache HttpComponents库下载Facebook图像
|
1天前
|
Java
Java中的多线程编程:基础知识与实践
【5月更文挑战第13天】在计算机科学中,多线程是一种使得程序可以同时执行多个任务的技术。在Java语言中,多线程的实现主要依赖于java.lang.Thread类和java.lang.Runnable接口。本文将深入探讨Java中的多线程编程,包括其基本概念、实现方法以及一些常见的问题和解决方案。
|
1天前
|
安全 算法 Java
深入理解Java并发编程:线程安全与性能优化
【5月更文挑战第13天】 在Java开发中,并发编程是一个复杂且重要的领域。它不仅关系到程序的线程安全性,也直接影响到系统的性能表现。本文将探讨Java并发编程的核心概念,包括线程同步机制、锁优化技术以及如何平衡线程安全和性能。通过分析具体案例,我们将提供实用的编程技巧和最佳实践,帮助开发者在确保线程安全的同时,提升应用性能。
10 1