1.12 声明自定义异常
如果 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 声明自定义异常相关推荐
- python中自定义错误_在现代Python中声明自定义异常的正确方法?
在现代Python中声明自定义异常类的正确方法是什么?我的主要目标是遵循其他异常类所具有的任何标准,以便(例如)由捕获异常的任何工具打印出异常中包含的任何额外字符串. 所谓"现代Python ...
- Think in Java第四版 读书笔记6第12章 异常处理
12.1 概念 异常可以将"在正常时候执行的代码"和"发生错误时的代码"相分离,达到结构清晰的目的. a.受检查异常checkedException 编译器强制 ...
- 八种基本数据类型变量声明
package com.hisoft.java.Bean;public class Test1 { static int age=12; // String str = new String(&quo ...
- db2case语句_DB2 常用的SQL语句
1.组合语句执行 BEGINATOMIC 表达式1分号空格/回车 表达式2分号空格/回车 END 2.应该限制访问权限的表(应该撤销这些表PUBLIC SELECT访问权) SYSCAT.DBAUTH ...
- Java Scanner 类、异常处理 总结
1. Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入,并通过 Scanner 类的 next() 与 nextLin ...
- java scanner类int_Java之 Scanner类
1. Scanner 类 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入,并通过 Scanner 类的 next() 与 nextLin ...
- java面向对象程序课本,Java面向对象程序设计
出版说明 前言 第1篇 Java程序设计基础 第1章 Java语言入门 1.1 Java的诞生 1.2 Java的特点 1.3 Java程序的开发工具 1.4 Java运行环境 1.4.1 JDK的下 ...
- 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. {", ...
- oracle常见语句(转载)
--==================================== 一.sql语句方面 =================================================== ...
最新文章
- Http协议原理解析
- doget dopost 过滤器 乱码
- 《12个球问题》分析
- Java—接口与抽象类
- 记录docker开发hadoop,解决bug Datanode denied communication with namenode because hostname cannot be
- 什么是机器学习:一次权威定义之旅
- mybatis_user_guide(5) 动态 SQL
- LIST函数JAVA特点_Java 集合系列 07 List总结(LinkedList, ArrayList等使用场景和性能分析)...
- Github上点赞最多的10个Python项目(2020年3月)
- ipad中的active失效?
- 130242014075 杨利城 《电商系统某功能模块》的需求分析与设计
- 目标管理 督查督办系统
- 万年历程序中十二生肖排列顺序及算法
- 中国菜刀与一句话木马之间的原理分析
- 面试:设计一个电商平台积分兑换系统
- 电话程控交换机安装经验
- C#毕业设计——基于C#+asp.net+sqlserver的学生信息管理系统设计与实现(毕业论文+程序源码)——学生信息管理系统
- ISIS 7 Professional出现(No power supply specifed for net 3.3V in Power Rail Configuration.)异常
- 线性代数【21】特征值和特征向量的几何意义
- 2017年2月历史文章汇总
热门文章
- OpenSession与getCurrentSession的区别
- 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心
- C#+uploadify3.1上传示例,可使用中文按钮
- 使用TabNavigator遇到的问题
- iOS开发笔记[13/50]:解决SenTestingKit/SenTestingKit.h: No such file or directory问题
- PHP的类与对象-笔记
- C语言中函数可变参数解析
- nRF52832的UICR
- iBeacon的数据包格式
- Linux内核中断底半部处理--工作队列