如果 Java 提供的内置异常类型不能满足程序设计的需求,这时我们可以自己设计 Java 类库或框架,其中包括异常类型。

  • 实现自定义异常类需要继承 Exception 类或其子类,
  • 自定义运行时异常类需继承 RuntimeException 类或其子类。
  • 写一个检查性异常类,则需要继承 Exception 类。

自定义异常的语法形式为:

<class><自定义异常名><extends><Exception>

在编码规范上,一般将自定义异常类的类名命名为 XXXException,其中 XXX 用来代表该异常的作用。

自定义异常类一般包含两个构造方法:一个是无参的默认构造方法,另一个构造方法以字符串的形式接收一个定制的异常消息,并将该消息传递给超类的构造方法。

例如,以下代码创建一个名称为 IntegerRangeException 的自定义异常类:

class IntegerRangeException extends Exception {public IntegerRangeException() {super();}public IntegerRangeException(String s) {super(s);}
}

以上代码创建的自定义异常类 IntegerRangeException 类继承自 Exception 类,在该类中包含两个构造方法。

例 1
编写一个程序,对会员注册时的年龄进行验证,即检测是否在 0~100 岁。

1)这里创建了一个异常类 MyException,并提供两个构造方法。MyException 类的实现代码如下:

public class MyException extends Exception {public MyException() {super();}public MyException(String str) {super(str);}
}

2)接着创建测试类,调用自定义异常类。代码实现如下:

import java.util.InputMismatchException;
import java.util.Scanner;
public class Test {public static void main(String[] args) {int age;Scanner input = new Scanner(System.in);System.out.println("请输入您的年龄:");try {age = input.nextInt();    // 获取年龄if(age < 0) {throw new MyException("您输入的年龄为负数!输入有误!");} else if(age > 100) {throw new MyException("您输入的年龄大于100!输入有误!");} else {System.out.println("您的年龄为:"+age);}} catch(InputMismatchException e1) {System.out.println("输入的年龄不是数字!");} catch(MyException e2) {System.out.println(e2.getMessage());}}
}

3)运行该程序,当用户输入的年龄为负数时,则拋出 MyException 自定义异常,执行第二个 catch 语句块中的代码,打印出异常信息。程序的运行结果如下所示。

请输入您的年龄:
-2
您输入的年龄为负数!输入有误!

当用户输入的年龄大于 100 时,也会拋出 MyException 自定义异常,同样会执行第二个 catch 语句块中的代码,打印出异常信息,如下所示。

请输入您的年龄:
110
您输入的年龄大于100!输入有误!

在该程序的主方法中,使用了 if…else if…else 语句结构判断用户输入的年龄是否为负数和大于 100 的数,如果是,则拋出自定义异常 MyException,调用自定义异常类 MyException 中的含有一个 String 类型的构造方法。在 catch 语句块中捕获该异常,并调用 getMessage() 方法输出异常信息。

提示:因为自定义异常继承自 Exception 类,因此自定义异常类中包含父类所有的属性和方法。

例2:

public class Person {String name;String sex;public Person(String name,String sex){this.name=name;this.sex=sex;}
}
public class ZaoTangZi {public void man(Person P) throws SexException{if(P.sex=="男"){System.out.println("欢迎进入基佬澡堂");}else{//需要抛出一个异常throw new SexException("女的,错误!出去");}}
}
public class SexException extends Exception {//自己定义的异常必须要继承Exception或RuntimeExceptionpublic SexException(String msg){super(msg);//调用父类的构造方法,Exception(msg)}
}
public class Test {public static void main(String[] args) throws SexException {Person p1=new Person("李一","男");Person p2=new Person("李花","女");ZaoTangZi z=new ZaoTangZi();z.man(p2);}
}

1.12 声明自定义异常相关推荐

  1. python中自定义错误_在现代Python中声明自定义异常的正确方法?

    在现代Python中声明自定义异常类的正确方法是什么?我的主要目标是遵循其他异常类所具有的任何标准,以便(例如)由捕获异常的任何工具打印出异常中包含的任何额外字符串. 所谓"现代Python ...

  2. Think in Java第四版 读书笔记6第12章 异常处理

    12.1 概念 异常可以将"在正常时候执行的代码"和"发生错误时的代码"相分离,达到结构清晰的目的. a.受检查异常checkedException 编译器强制 ...

  3. 八种基本数据类型变量声明

    package com.hisoft.java.Bean;public class Test1 { static int age=12; // String str = new String(&quo ...

  4. db2case语句_DB2 常用的SQL语句

    1.组合语句执行 BEGINATOMIC 表达式1分号空格/回车 表达式2分号空格/回车 END 2.应该限制访问权限的表(应该撤销这些表PUBLIC SELECT访问权) SYSCAT.DBAUTH ...

  5. Java Scanner 类、异常处理 总结

    1. Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入,并通过 Scanner 类的 next() 与 nextLin ...

  6. java scanner类int_Java之 Scanner类

    1. Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入,并通过 Scanner 类的 next() 与 nextLin ...

  7. java面向对象程序课本,Java面向对象程序设计

    出版说明 前言 第1篇 Java程序设计基础 第1章 Java语言入门 1.1 Java的诞生 1.2 Java的特点 1.3 Java程序的开发工具 1.4 Java运行环境 1.4.1 JDK的下 ...

  8. C#编码规范2[转]

    目 录  1. 简介 3 2. 适用范围 3 3. 文体 3 4. 代码组织与风格 3 4.1. Tab 3 4.2. 缩进 4 4.3. 空行 4 4.4. 函数长度 4 4.5. {", ...

  9. oracle常见语句(转载)

    --==================================== 一.sql语句方面 =================================================== ...

最新文章

  1. Http协议原理解析
  2. doget dopost 过滤器 乱码
  3. 《12个球问题》分析
  4. Java—接口与抽象类
  5. 记录docker开发hadoop,解决bug Datanode denied communication with namenode because hostname cannot be
  6. 什么是机器学习:一次权威定义之旅
  7. mybatis_user_guide(5) 动态 SQL
  8. LIST函数JAVA特点_Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)...
  9. Github上点赞最多的10个Python项目(2020年3月)
  10. ipad中的active失效?
  11. 130242014075 杨利城 《电商系统某功能模块》的需求分析与设计
  12. 目标管理 督查督办系统
  13. 万年历程序中十二生肖排列顺序及算法
  14. 中国菜刀与一句话木马之间的原理分析
  15. 面试:设计一个电商平台积分兑换系统
  16. 电话程控交换机安装经验
  17. C#毕业设计——基于C#+asp.net+sqlserver的学生信息管理系统设计与实现(毕业论文+程序源码)——学生信息管理系统
  18. ISIS 7 Professional出现(No power supply specifed for net 3.3V in Power Rail Configuration.)异常
  19. 线性代数【21】特征值和特征向量的几何意义
  20. 2017年2月历史文章汇总

热门文章

  1. OpenSession与getCurrentSession的区别
  2. 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心
  3. C#+uploadify3.1上传示例,可使用中文按钮
  4. 使用TabNavigator遇到的问题
  5. iOS开发笔记[13/50]:解决SenTestingKit/SenTestingKit.h: No such file or directory问题
  6. PHP的类与对象-笔记
  7. C语言中函数可变参数解析
  8. nRF52832的UICR
  9. iBeacon的数据包格式
  10. Linux内核中断底半部处理--工作队列