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的处理,如以上代码所示。

java自定义错误码类_如何编写和应用Java的自定义异常类相关推荐

  1. Spring Boot validator参数验证restful自定义错误码响应

    2019独角兽企业重金招聘Python工程师标准>>> 关于spring web应用中关于如何使用 Bean Validation API和hibernate-validator的文 ...

  2. java 错误码设计_关于Java中异常的设计

    Java中异常分为checked 和 unchecked 两种. 首先, 什么时候使用checked,什么时候用unchecked? checked本意是要求调用方处理这个异常, unchecked ...

  3. java如何创造一个整数的类_【技术干货】Java 面试宝典:Java 基础部分(1)

    原标题:[技术干货]Java 面试宝典:Java 基础部分(1) Java基础部分: 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语法,集合的语法,io 的 ...

  4. SpringBoot自定义错误码,并支持国际化

    实现效果:不同的业务模块用不同的错误编码 一.错误码封装 获取错误信息接口类,所有的错误都要统一实现该接口类 public interface BaseErrorCode {/*** 获取错误码* @ ...

  5. java代码解锁华为_如何编写可怕的Java代码?

    我决定告诉你如何编写可怕的Java代码.如果你厌倦了所有这些美丽的设计模式和最佳实践,并且想写些疯狂的东西,请继续阅读. 如果你正在寻找有关如何编写良好代码的建议,请查看其它文章! 对一切使用异常 你 ...

  6. spring 加载java类_在Spring中基于Java类进行配置的完整步骤

    在Spring中基于Java类进行配置的完整步骤 发布于 2020-7-7| 复制链接 基于Java配置选项,可以编写大多数的Spring不用配置XML,下面 前言JavaConfig 原来是 Spr ...

  7. scala本地调试_如何编写自己的Java / Scala调试器

    scala本地调试 在本文中,我们将探讨Java / Scala调试器的编写和工作方式. 诸如Windows的WinDbg或Linux / Unix的gdb之类的本机调试器通过操作系统直接提供给它们的 ...

  8. java记事本教程_Java实战_手把手编写记事本

    Java运用SWT插件编写桌面记事本应用程序 可实现windows系统桌面记事本基本功能.傻瓜式教学,一步一步手把手操作.小白也可自己编写出完整的应用程序. 须要工具:Eclipse(带SWT插件) ...

  9. java如何编写windows木马_如何编写可怕的 Java 代码?

    原标题:如何编写可怕的 Java 代码? 作者:武培轩 我决定告诉你如何编写可怕的Java代码.如果你厌倦了所有这些美丽的设计模式和最佳实践,并且想写些疯狂的东西,请继续阅读. 如果你正在寻找有关如何 ...

最新文章

  1. 微信小程序利用缓存提高接口请求性能
  2. 教你打造Silverlight超酷翻页实例
  3. 面试题 gety() getTop() TranslationY关系
  4. app-debug.apk does not exist on disk
  5. java+lodop+vue+热敏打印机,打印图片
  6. 我的世界学园都市java_我的世界学园都市地图
  7. 【oracle】中文数字转阿拉伯数字
  8. MaxDOS 网刻服务端网刻教程。
  9. C#.NET生成条形码(Code39和Code128)
  10. 数列区间询问中的分块思想CF86D,BC#22-1004-NPY and girls
  11. 在线客服系统代码安装 (附移动版APP下载)
  12. linux 加固检测脚本,Linux系统检测和防护脚本
  13. 三分钟了解http和https
  14. win7一点计算机就卡死,Win7系统卡屏假死怎么解决
  15. 贝叶斯网络的python实现:Monty Hall问题的求解
  16. 在c语言求30角的正弦值,正弦及30度角的正弦值.doc
  17. 《大话Java性能优化》面向对象及基础类型相关部分
  18. PHP_微信公众号开发(1)
  19. Mercurial修改历史changeset
  20. 商业版微信小程序开发流程

热门文章

  1. 五省竞赛计算机作品,关于征集2017年华北五省(市、自治区)及港澳台大学生计算机应用大赛河北赛区竞赛作品的通知...
  2. html5画布 文本无法显示,淡出HTML5画布中的文本效果
  3. qt中继承pushbutton自定义控件设置按钮样式
  4. 多线程:实现Callable接口
  5. 【C语言进阶】 宏定义实现字符串引用
  6. mysql筛选两个表有相同项的数据库_用SQL查询两个表中相同的数据
  7. android懒加载单实例,【 Android 10 设计模式 】系列 -- 单例
  8. java的多态怎么理解_JAVA多态的理解
  9. 机器人无限火力无限e符文_LOL:无限火力开黑指南 三大玩法让你快乐加倍
  10. 小米9android q测试版,基于Android Q的MIUI来了 小米9尝鲜