首页 > 其他分享 >Day28:自定义异常详解

Day28:自定义异常详解

时间:2022-12-01 01:12:05浏览次数:41  
标签:分数 Exception Day28 自定义 ScoreException ScoreCheck 详解 异常 public

自定义异常

Java中有很多异常类,但有时候我们会用到一些Java中没有提供的异常,需要我们自己去定义异常。

只要我们的类继承Exception或者RuntimeException,该类会变成异常体系的一员。

格式:

public class 类名 extends Exception/RuntimeException{//Exception为编译时异常;RuntimeException运行时异常
    无参构造;
    有参构造
}

范例:

public class ScoreException extends Exception{
    public ScoreException(){}
    public ScoreException(String message){
       super(message);
        //这里为什么要调用父类的有参构造器
        //当父类异常对象的有参构造器调用时,会把所带参数信息赋值给detaliMessage;最后会成为异常原因在调用打印信息时体现出来
    }
}

接下来我们来做一个自定义异常的范例:

检测输入的分数,要求0-100的分数为成绩合格,若用户输入区间外的分数则报出详细的异常分析

//定义一个异常类
public class ScoreException extends Exception{
    public ScoreException{}
    public ScoreException(String message){
        detailMessage=message;
    }
}
//创建一个含有检测方法的分数检查类
public class ScoreCheck{
    public void check(int a) throws ScorekException{//ScorekException属于编译时异常,若方法中没有处理则需要抛出去给调用者来处理异常
        if(a<0||a>100){
            throw new ScoreException();//出现异常则抛出一个异常对象,即实例异常对象
        }else{
            System.out.println("成绩合格")
        }
    }
}
public class Test{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);//创建扫描器接受用户输入
        System.out.println("请输入分数");//提示语
        int b=sc.nextInt();//将用户输入的符合我们需要的类型数据作为变量
        ScoreCheck s=new ScoreCheck();//分数检查类实例化
        try{
            s.check(b);
            //check方法抛出了异常,该异常为编译时异常,所以我们需要通过try——catch 来处理异常
            //check方法抛出的异常会去匹配下面catch的异常类型
        }catch(ScoreException e){//匹配成功,执行语句
            e.printStackTrace();//打印异常的所有分析
        }
        sc.close();//记得关闭扫描器,节约资源
    }
}
//输出结果
请输入分数
98
成绩合格

请输入分数
120
com.liuwei.oop.exception02.ScoreException
	at com.liuwei.oop.exception02.ScoreCheck.check(ScoreCheck.java:6)
	at com.liuwei.oop.exception02.Test.main(Test.java:12)
//这里我们发现我们输入120时,异常信息中并没有将异常原因分析出来,只是将异常类型、位置分析出来了
    //原因是我们在抛出异常对象时采用的是无参构造
    //我们应该抛出有参构造,将我们想要得到提示信息作为参数传递给Exception的原因分析,这样我们在调用Exception的printStackTrace时会打印原因分析
//修改抛出异常对象的参数
public class ScoreCheck{
    public void check(int a) throws ScorekException{
        if(a<0||a>100){
            throw new ScoreException("请保证输入的分数在0-100以内");
            //将我们想要的异常提示信息作为参数传递给有参构造,最后赋值给Exception的detailMessage
        }else{
            System.out.println("成绩合格")
        }
    }
}
//输出信息
120
com.liuwei.oop.exception02.ScoreException: 请保证输入的分数在0-100以内//此处则打印出了我们想要的异常原因分析提示语
	at com.liuwei.oop.exception02.ScoreCheck.check(ScoreCheck.java:6)
	at com.liuwei.oop.exception02.Test.main(Test.java:12)

1.1 throws和throw的区别

throws throw
用于方法声明的括号后,跟的是异常类型名 用于方法体中,跟的是异常对象名
表示抛出异常,谁调用方法谁处理异常 表示抛出异常,交给try—catch内去匹配并执行相应的的语句
表示异常可能会出现,但是不一定会出现 一旦执行,一定出现异常

标签:分数,Exception,Day28,自定义,ScoreException,ScoreCheck,详解,异常,public
From: https://www.cnblogs.com/CQliuwei/p/16940263.html

相关文章

  • Day27:异常详解
    异常1.1异常概述异常(Exception)指程序运行中出现的不正常情况:文件找不到、网络异常、非法参数等等。我们通过代码来了解一下:publicclassDemo{publicstaticvoi......
  • pod详解
    Pod生命周期我们一般将pod对象从创建至终的这段时间范围称为pod的生命周期,它主要包含下面的过程:pod创建过程运行初始化容器(initcontainer)过程运行主容器(maincontain......
  • aop切点定义表达式详解
    目录1.execution2.within3.this4.target5.args6.bean7.@args8.@target9.@within10.@annotation11.组合表达式1.execution可以匹配到方法级别格式如下:execution(方法访......
  • Objective-C语法property详解
    1、简介: property是Objective-C的关键词,与@synthesize配对使用,用来让编译好器自动生成与数据成员同名的方法声明。@synthesize则是用来生成对应声明方法的实现。 1.1prop......
  • HTTP2 协议长文详解
    一、HTTP2简介HTTP2是一个超文本传输协议,它是HTTP协议的第二个版本。HTTP2主要是基于google的SPDY协议,SPDY的关键技术被HTTP2采纳了,因此SPDY的成员全程参与......
  • 指针详解(day19)
    5.函数指针释义:指向函数的指针。函数指针的创建实例intAdd(intx,inty){intz;z=x+y;returnz;}intmain(){inta=1;intb=2;printf("\n%d\n",Add(a,......
  • 自定义敏捷项目看板,体验再升级!博云DevOps平台发布3.1版本
    6月9日,BoCloud博云BeyondDevOps平台更新了V3.1版本。新版本在上一版的基础上完善了产品功能,进一步改善产品易用性——支持敏捷项目看板自定义,集成Jirasoftware,丰富工作项类......
  • 博云DevOps 3.0重大升级 | 可用性大幅提升、自研需求管理&自定义工作流上线,满足客户多
    DevOps能够为企业带来更高的部署频率、更短的交付周期与更快的客户响应速度。标准化、规范化的管理流程,可视化和数字化的研发进度管理和可追溯的版本也为企业带来的了更多的......
  • vue jeecg表格对数据的处理自定义
    //表头columns:[...{title:'商品图片',align:"center",dataIndex:'coverImgLocal',scopedSlots:{customRender:'picture'......
  • vue a-upload组件上传图片,headers和data字段自定义
    <divclass="clearfix"><a-uploadlist-type="picture-card":file-list="fileList"@preview="handlePreview"@change="handleChange":before-upload="......