(请关注本人 "异常" 总集篇博文 --《详解 异常》)
自定义异常:
首先回答一个问题 -- 为什么需要自定义异常:
答曰:
因为在以后的开发过程中, 我们可能会遇到各种问题,
而 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)
来源: http://www.bubuko.com/infodetail-3447830.html