网站首页 > java教程 正文
如果Java提供的内置异常类型不能满足程序设计的需求,这时我们可以自己设计Java类库或框架,其中包括异常类型。实现自定义异常类需要继承Exception类或其子类,如果自定义运行时异常类需继承RuntimeException类或其子类。
自定义异常的语法形式为:
<class><自定义异常名><extends><Exception>1复制代码类型:[java]
在编码规范上,一般将自定义异常类的类名命名为XXXException,其中XXX用来代表该异常的作用。
自定义异常类一般包含两个构造方法:一个是无参的默认构造方法,另一个构造方法以字符串的形式接收一个定制的异常消息,并将该消息传递给超类的构造方法。
例如,以下代码创建一个名称为IntegerRangeException的自定义异常类:
class IntegerRangeException extends Exception {
public IntegerRangeException() {
super();
}
public IntegerRangeException(String s) {
super(s);
}
}12345678复制代码类型:[java]
以上代码创建的自定义异常类IntegerRangeException类继承自Exception类,在该类中包含两个构造方法。
例1
编写一个程序,对会员注册时的年龄进行验证,即检测是否在0~100岁。
1)这里创建了一个异常类MyException,并提供两个构造方法。MyException类的实现代码如下:
public class MyException extends Exception {
public MyException() {
super();
}
public MyException(String str) {
super(str);
}
}12345678复制代码类型:[java]
2)接着创建测试类,调用自定义异常类。代码实现如下:
import java.util.InputMismatchException;
import java.util.Scanner;
public class Test07 {
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());
}
}
}1234567891011121314151617181920212223复制代码类型:[java]
3)运行该程序,当用户输入的年龄为负数时,则拋出MyException自定义异常,执行第二个catch语句块中的代码,打印出异常信息。程序的运行结果如下所示。
请输入您的年龄:
-2
您输入的年龄为负数!输入有误!123复制代码类型:[java]
当用户输入的年龄大于100时,也会拋出MyException自定义异常,同样会执行第二个catch语句块中的代码,打印出异常信息,如下所示。
请输入您的年龄:
110
您输入的年龄大于100!输入有误!123复制代码类型:[java]
在该程序的主方法中,使用了if…elseif…else语句结构判断用户输入的年龄是否为负数和大于100的数,如果是,则拋出自定义异常MyException,调用自定义异常类MyException中的含有一个String类型的构造方法。在catch语句块中捕获该异常,并调用getMessage()方法输出异常信息。
提示:因为自定义异常继承自Exception类,因此自定义异常类中包含父类所有的属性和方法。
猜你喜欢
- 2024-11-06 Java核心知识3:异常机制详解(java的三种核心机制是什么)
- 2024-11-06 【Spring系列】05 自定义异常以及全局异常处理器 #java
- 2024-11-06 3种Sentinel自定义异常,你用过几种?
- 2024-11-06 关于Java Exception异常的深入用法及实例
- 2024-11-06 Java-throw异常详解以及过程(java throw exception)
- 2024-11-06 《JAVA编程思想》5分钟速成:第12章(异常)
- 2024-11-06 面试官:java开发中异常怎么定义好 程序员:不知道
- 2024-11-06 「译」11条Java异常处理的最佳实践
- 2024-11-06 Java入门教程十一(异常处理)(java异常处理的三种方法)
- 2024-11-06 Java,你管这叫异常?(java异常是什么意思)
你 发表评论:
欢迎- 05-16SpringBoot整合Redis实现常用功能
- 05-16基于Redis实现简单的延时消息队列
- 05-16安装Redis
- 05-16Spring系列之Redis的两种集成方式
- 05-16Django连接Redis集群问题排查思路和总结
- 05-16只需5分钟,完成Redis所有命令操作~
- 05-16熟练使用 Redis 的 5 大数据结构:Java 实战教程
- 05-16Redis 常见业务场景及实例(Java)
- 最近发表
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)