zoukankan      html  css  js  c++  java
  • 详解 自定义异常

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

    自定义异常:

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

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

  • 相关阅读:
    项目是使用 Microsoft.AspNetCore.App 版本 2.1.20 还原的, 但使用当前设置, 将改用版本
    vs发布排除 文件
    win10部分低功耗蓝牙找不到
    解决JLINK_v8灯不亮 jtag 提示无法识别USB设备
    C# BYTE[] 与16进制字符串互相转换
    【转】阿里云证书资源包申请免费SSL流程(图文教程) 【免费证书申请将切换到证书资源包下】
    使用ApkTool以及dex2jar对apk进行反编译-更新异常以及解决方案
    使用ApkTool
    安装纯净版xp,,优盘装系统提示INF file txtsetup.sif的解决方法
    应急灾害管理相关英文关键词梳理--仅作为笔记
  • 原文地址:https://www.cnblogs.com/codderYouzg/p/12418410.html
Copyright © 2011-2022 走看看