11.7.1  编写自定义异常类的模式

编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程。常用的编写自定义异常类的模式如下:
public class CustomException extends Exception {    //或者继承任何标准异常类
    public CustomException()  {}                //用来创建无参数对象
    public CustomException(String message) {        //用来创建指定参数对象
        super(message);                             //调用超类构造器
    }
}
当然也可选用Throwable作为超类。其中无参数构造器为创建缺省参数对象提供了方便。第二个构造器将在创建这个异常对象时提供描述这个异常信息的字符串,通过调用超类构造器向上传递给超类,对超类中的toString()方法中返回的原有信息进行覆盖。
来讨论一个具体例子。假设程序中需要验证用户输入的表示年龄的数据必须是正整数值。我们可以按照以上模式编写这个自定义异常类如下:
public class NegativeAgeException extends Exception {
                                            //或者:extends Throwable
    public NegativeAgeException()  {}
    public NegativeAgeException(String message) {
        super(message);
    }
}
下面是应用这个自定义异常类的例子:
//完整程序存在本书配套资源目录为Ch11中名为NegativeAgeExceptionTest.java
...
try{
   String ageString = JOptionPane.showInputDialog("Enter your age: ");
   if (Integer.parseInt(ageString) < 0)
        throw new NegativeAgeException("Please enter a positive age");
   else
        JOptionPane.showMessageDialog(null, ageString, "Age", 1);
}
catch(NegativeAgeException e){
    System.out.println(e);
}
...
或者,可以创建一个缺省对象,然后在catch中打印具体信息,如:
    throw new NegativeAgeException();
    ...
catch (NegativeAgeException e) {
    System.out.println("Please enter a positive age");
将产生与第一个例子相同的效果。

11.7.2  自定义异常处理

无论是利用标准API异常类来处理特殊的异常,或者编写自定义的异常类来达到同样目的,问题的关键是:
1.         当这个异常发生时,如何及时捕获这个异常。
2.         捕获这个异常后,如何产生精确的异常处理信息。
       毋庸置疑,我们不可能期待JVM自动抛出一个自定义异常,也不能够期待JVM会自动处理一个自定义异常。发现异常、抛出异常以及处理异常的工作必须靠编程人员在代码中利用异常处理机制自己完成。
一般情况下,发现和抛出一个自定义异常通过在try程序块中利用if和throw语句完成,即:
try {
    ...
    if (someExceptionConditon == true) {
        throw new CustomException("A custom exception xxx occurred. Please
        check your entry...")
    ...
    }
catch (CustomException e) {
    ...
}
而打印异常处理信息可以在抛出时包括在构造器的参数中,或者包括在处理这个异常的catch中。
另外应该注意在自定义异常发生之前,有可能产生标准异常的情况。例如,在一个需要验证年龄必须是正整数值的程序中,利用自定义异常类,如NegativeAgeException,验证输入的年龄是否正整数,即:
try {
    ...
    if (Integer.parseInt(ageString) < 0)     
        throw NegativeAgeException("Please enter a positive age");
    else
        ...
    }
    catch (NumberFormatException e) {
        System.out.println(e);
    }
    catch (NegativeAgeException e) {
        System.out.println(e);
    }
    ...
注意在这个代码中,如果ageString是非法整数字符串,如“25ab”,系统将首先抛出NumberFormatException,而不会执行throw NegativeAgeException("Please enter a positive age")。所以应该在catch中加入对NumberFormatException的处理,如以上代码所示。

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

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

如何编写和应用Java的自定义异常类相关推荐

  1. java自定义错误码类_如何编写和应用Java的自定义异常类

    11.7.1编写自定义异常类的模式 编写自定义异常类实际上是继承一个API标准异常类,用新定义的异常处理信息覆盖原有信息的过程.常用的编写自定义异常类的模式如下: public class Custo ...

  2. java中自定义异常类

    java中自定义异常类 参考文章: (1)java中自定义异常类 (2)https://www.cnblogs.com/pecool/p/7967663.html 备忘一下.

  3. java——异常——自定义异常类

    自定义异常类 自定义异常类: java提供的异常类,不够我们使用,需要自己定义一些异常类 格式: public classXXXExcepiton extends Exception | Runtim ...

  4. [转载] Java中自定义异常的声明与处理

    参考链接: Java中的用户定义异常 #Java中自定义异常的声明与处理 ##一.编写自己的异常类需要注意 1.所有的异常都必须是Throwable 的子类: 2.如果希望写一个检查性异常类,则需要继 ...

  5. java编写自定义异常类,统一异常处理

    /** * 自定义异常类 */ public class MyBaseException extends RuntimeException{private static final long seri ...

  6. java+自定义异常类+输入若干成绩 为负数时输出抛出异常_java+自定义异常类+输入若干成绩 为...

    java+自定义异常类+输入若干成绩 为 [2021-02-10 19:00:54]  简介: java中定义类的关键字是:"class".在Java中定义一个类,需要使用&quo ...

  7. java异常——异常分类+声明已检查异常+如何抛出异常+自定义异常类

    [0]README 0.1) 本文描述+源代码均 转自 core java volume 1, 旨在理解 java异常--异常分类+声明已检查异常+如何抛出异常+自定义异常类 的相关知识: 0.2)异 ...

  8. Java语言所有异常类均继承自_要继承自定义异常类的继承方式必须使用 ( ) 关键字_学小易找答案...

    [填空题]当异常已经被定义时,必须通过( ) 语句来处理它. [填空题]Catch 子句包含( )的程序段 [单选题]下列java语言的常用异常类中,属于检测异常的是() [单选题]自定义异常类时,可 ...

  9. java 自定义异常实例分析_Java自定义异常类的实例详解

    Java自定义异常类的实例详解 为什么要自己编写异常类?假如jdk里面没有提供的异常,我们就要自己写.我们常用的类ArithmeticException,NullPointerException,Ne ...

最新文章

  1. java设计模式---单例模式
  2. PHP求并集,交集,差集
  3. [密码学] 消息认证码构造方法
  4. 联发科Helio P35处理器曝光:10GB运存
  5. 用计算机算算术平方根顺序是ON然后是什么,第2课时用计算器求一个正数的算术平方根.ppt...
  6. Boot loader: Grub入门(转)
  7. dem聚类只能成为一类
  8. 超好看的自适应蜘蛛池官网首页源码
  9. php 数组处理函数,PHP数组处理函数举例
  10. python urllib编码
  11. 让模拟器也支持GPS定位(模拟实现)
  12. Python获取外网ip
  13. 文件及文件夹管理规范
  14. 天冷就要大口吃肉肉~python采集周边烤肉店数据【附代码】
  15. 智能扭矩系统——SunTorque智能扭矩系统,引领拧紧工艺新变革!
  16. 在服务器上设置虚拟传入,如何配置 SMTP 虚拟服务器以进行邮件传递
  17. qt中提升控件的操作
  18. GitHub中Organization的Member邀请和clone代码库
  19. java技术栈xmind,zookeeper面试
  20. SuperMap GIS的TIN地形数据处理十问

热门文章

  1. 存储引擎-存储结构之一:行
  2. 分析死锁并处理_整理贴
  3. 湖北地区的一些主要DNS服务器
  4. LA4636积木艺术
  5. 【错误记录】360 加固后的运行错误 ( 加固 SO 动态库时不能对第三方动态库进行加固 )
  6. 【Android RTMP】Android Camera 视频数据采集预览 ( 图像传感器方向设置 | Camera 使用流程 | 动态权限申请 )
  7. 【IOS 开发】Objective - C 面向对象高级特性 - 包装类 | 类处理 | 类别 | 扩展 | 协议 | 委托 | 异常处理 | 反射
  8. Centos 7和Centos 6的防火墙
  9. Dynamics CRM CE 怎样从 UCI 改为 classic UI
  10. mybatis无mapper.xml用法