(请关注本人 “异常” 总集篇博文——《详解 异常》)
自定义异常:
首先回答一个问题——为什么需要自定义异常:
答曰:
因为在以后的开发过程中,我们可能会遇到各种问题,
而Jdk不可能针对每一种问题都给出具体的异常类与之对应
为了满足需求,我们就需要自定义异常.
现在,本人通过两个有趣的例子,来为大家讲解下如何分别 自定义运行时异常 与 非运行时异常:
自定义非运行时异常:
条件:
- 继承 Exception类
- 在自定义异常内编写 与Exception类的构造方法 含有相同参数的构造方法(个数不限,有需要即可)
- 序列化版本号 可加可不加(看程序需要不需要)
本人来通过一个很常见的问题,来讲解 自定义非运行时异常 —— 分数录入问题:
埼玉老师在一次给安杰斯考试后的各项录分环节,现在为了防止他因为手速太快,而录入分数错误范围的分数。
要求:检验每次从键盘录入的分数是否在范围内。
(假设最高分是100分,最低是0分)
那么,本人来自定义一个非运行时异常:
package about_io;
public class ScoreException extends Exception {
public ScoreException(String msg) {
super(msg);
}
}
现在,本人来编写一个测试类:
package about_io;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws ScoreException {
// 成绩不合法异常 0----100
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的成绩 0---100");
int score = scanner.nextInt();
if(score<=100&&score>=0) {
System.out.println(score);
} else {
throw new ScoreException("成绩不合法异常");
}
}
}
本人先展示下正确录入正确分数的运行结果:
现在,本人来故意键入一个不在范围内的值,来展示下运行结果:
那么,相信同学们已经学会了如何自定义非运行时异常
现在本人来展示下如何 自定义运行时异常:
自定义运行时异常:
条件:
- 继承 RuntimeException类
- 在自定义异常内编写 与RuntimeException类的构造方法 含有相同参数的构造方法(个数不限,有需要即可)
- 序列化版本号 可加可不加(看程序需要不需要)
本人同样地来通过一个很常见的问题,来讲解 自定义运行时异常 —— 银行取钱问题:
这天,jojo要去银行取钱,但是他不知道他的银行卡里有多少钱。为了解决他取钱时键入错误的金额,请编写程序。
要求:检验jojo键入的金额是否超过他银行卡里的总钱数
(假设他银行卡里只有1000元)
那么,本人来定义一个运行时异常:
package about_io;
public class NoMoneyException extends RuntimeException {
public NoMoneyException(String s) {
super(s);
}
}
现在,本人来给出一个测试类:
package about_io;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
int money=1000;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的取款金额 ");
int inputMoney= scanner.nextInt();
if(inputMoney<=money){
money-=inputMoney;
System.out.println("取款成功");
}else{
throw new NoMoneyException("余额不足");
}
}
}
本人先展示下正确键入金额的运行结果:
现在,本人来展示下键入金额多于卡内余额的运行结果:
我们现在来对比一下本人给的两个测试类的主函数,会发现:
只有内部throw非运行时异常的主函数throws了该异常
这就验证了本人在《详解 异常》中所讲到的一样:
- 编译时异常 ------- 可解决,也可不解决(即:Java程序必须显示处理,否则程序就会发生错误,无法通过编译)
(非运行时异常)- 运行时异常 ------- 必须解决(即:无需显示处理,也可以和编译时异常一样处理)
(“异常” 总集篇博文——《详解 异常》)
(本人“I/O流”总集篇博文链接:https:////www.cnblogs.com/codderYouzg/p/12418404.html)