详解 自定义异常

(请关注本人 “异常” 总集篇博文——《详解 异常》

自定义异常:

首先回答一个问题——为什么需要自定义异常:

答曰:
因为在以后的开发过程中,我们可能会遇到各种问题,
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了该异常

这就验证了本人在《详解 异常》中所讲到的一样:

  1. 编译时异常 ------- 可解决,也可不解决(即:Java程序必须显示处理,否则程序就会发生错误,无法通过编译)
    (非运行时异常)
  2. 运行时异常 ------- 必须解决(即:无需显示处理,也可以和编译时异常一样处理)

(“异常” 总集篇博文——《详解 异常》
(本人“I/O流”总集篇博文链接:https:////www.cnblogs.com/codderYouzg/p/12418404.html

posted @ 2020-03-05 09:15  在下右转,有何贵干  阅读(462)  评论(0编辑  收藏  举报