Java之异常(下):自定义异常类

news2024/10/5 23:26:18

一、前言:

  在我前面写的博客文章里有一篇叫《Java中关于自定义异常类的一些问题》,它里面讲到了大部分关于自定义异常的基础知识,如果大家想了解底层可以去那里查看。今天我将用一次细节的案例解析:我们所说的自定义异常类。

二、案例分析:

1、首先我先创建一个类:Student "学生"类,在里面有属于学生的成员变量(学号、年龄、性别等等),然后封装。

package com.feisi.ex;

public class Student {
    private String sid; //学号
    private int age;  //年龄
    private char sex;  //性别

    public Student() {
        this.sid="";
        this.age=0;
        this.sex=' ';
    }

    public Student(String sid, int age, char sex) {
        this.sid = sid;
        this.age = age;
        this.sex = sex;
    }

    public String getSid() {
        return sid;
    }

    public void setSid(String sid) {
        this.sid = sid;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public char getSex() {
        return sex;
    }

    public void setSex(char sex) {
        this.sex = sex;
    }
}

2、再写一个测试类:Test_Student,创建Student类的对象,然后给它的年龄赋值一个"-10",并打印年龄。

package com.feisi.test;
import com.feisi.ex.*;
public class Test_Student {
    public static void main(String[] args) {
        Student student =new Student();
        student.setAge(-10);
        System.out.println(student.getAge());
    }
}

3、代码运行结果:

但是我们实际考虑一下,一个学生的年龄可能是一个负数吗?为了当我们输入年龄为负数时,会去提示一下。那么我们接下来这么去修改一下setAge()方法 :

   public void setAge(int age) {
        if(age<0){
            return;
        }
        this.age = age;
    }

这时再运行:

 

很奇怪啊,明明我们赋了值,却输出一个"0" ,是不是会觉得莫名奇妙,而且又没有报错提醒 (就是如果出了问题又没报错,但是赋值输出又没成功) 。当代码很多的情况下,我们不知道哪个地方出了问题。所以我们是不是可以弄一个和之前讲的JDK提供自带的异常类(可以提示报错的):很相似的叫自定义异常类的东西。也就是当我们输入赋值的年龄是"-10"时,也可以提示报错。

4、改进与添加:

这时我创建一个自定义异常类叫:AgeException,并让它去继承Exception(因为它是所有异常类的父类),里面有一个成员变量。用来描述和打印:发生异常时的异常消息。还有当然这个时候:return 不能这么写了。具体写法如下:

(1)自定义异常类:AgeException 代码如下:

package com.feisi.ex;
//我自己定义的异常类:年龄异常
public class AgeException extends Exception {
    //异常提示文字描述信息
    private String message;
    public AgeException(){

    }
    public AgeException(String message){
        this.message=message;
    }

    public String getMessage() {
        return this.message;
    }
}

(2)setAge()方法修改:

/*  谁调用方法,谁就需要try...catch...处理这个异常  */
    public void setAge(int age) throws AgeException { //这里就是抛出去让调用者处理
        if(age<0){
            throw new AgeException("年龄不能小于0!");  //抛出年龄异常实例
            /*
            然后我们总不能自己写一个try..catch..去捕获处理吧。
            因为如果这样写了之后,当别人调用这个方法时是不是还是不知道哪里出了异常
            你自己解决掉了嘛,你没有抛出去给调用者
            */
        }
        this.age = age;
    }

(3)测试类修改:(因为它调用了这个方法,所以要进行try..catch..去捕获处理,接受:方法异常的抛出) 

1.

package com.feisi.test;
import com.feisi.ex.*;
public class Test_Student {
    public static void main(String[] args) {
        Student student =new Student();
        try {
            student.setAge(-10);
        } catch (AgeException e) {
            e.printStackTrace(); //打印异常堆栈信息
        }
        System.out.println(student.getAge());
    }
}

2. 或把那个方法变成:e.getMessage()

package com.feisi.test;
import com.feisi.ex.*;
public class Test_Student {
    public static void main(String[] args) {
        Student student =new Student();
        try {
            student.setAge(-10);
        } catch (AgeException e) {
            System.out.println(e.getMessage());//得到异常信息描述
        }
        System.out.println(student.getAge());
    }
}

其中那个异常对象调用的方法:

e.printStackTrace();意思是:打印异常堆栈信息。

e.getMessage();意思是:得到异常信息描述。

3.二种运行结果:

 

4.小结:(具体的可以去看我之前写的博客《Java中关于自定义异常类的一些问题》)

 (1)throw表示抛出异常,语法是: 
          throw new 异常类型([异常信息]);
    
  (2)throws表示用来声明方法可能会抛出那些异常: 语法是:
          throws 异常类型1,异常类型2…

  

5.补充:

  (其实自定义异常类还可以这样简单写),也就是我们不用去写private String message;因为这里只是为了方便学习,告诉我们用这个来储存异常信息描述。因为它继承了Exception,它父类已经有了这个message成员,所以我们只需要用super()调用父类的构造方法:给message赋值,而且父类也有一个getMessage()方法,都可以直接用就行,不需要写。

  实际写法如下:

package com.feisi.ex;
//我自己定义的异常类:年龄异常
public class AgeException extends Exception {
    //异常提示文字描述信息
    public AgeException(){
         super();
    }
    public AgeException(String message){
        super(message);
    }

}

以上就是这次的案例介绍,具体的如上面讲的一样,看我之前写的博客!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1248029.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习篇】Linux中grep、sed、awk

Linux 文本处理三剑客 – awk, sed, grep grep过滤文本 https://zhuanlan.zhihu.com/p/561445240 grep 是 Linux/Unix 系统中的一个命令行工具&#xff0c;用于从文件中搜索文本或字符串。grep 代表全局正则表达式打印。当我们使用指定字符串运行 grep 命令时&#xff0c;如…

VMware安装windows操作系统

一、下载镜像包 地址&#xff1a;镜像包地址。 找到需要的版本下载镜像包。 二、安装 打开VMware新建虚拟机&#xff0c;选择用镜像文件。将下载的镜像包加载进去即可。

(Matalb回归预测)GA-BP遗传算法优化BP神经网络的多维回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分代码&#xff1a; 四、分享本文全部代码数据说明手册&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于M…

如何在 Web 应用程序中查找端点?

如何在 Web 应用程序中查找端点? 这篇文章主要讲述了如何在网络应用中找到端点。以下是文章的主要要点: 端点是网络服务的访问地址,通过引用这个URL,客户可以访问服务提供的操作。端点提供了寻址Web服务端点所需的信息。 HTTP消息是服务器和客户端之间交换数据的方式,包…

2023年c语言程序设计大赛

7-1 这是一道送分题 为了让更多的同学参与程序设计中来&#xff0c;这里给同学们一个送分题&#xff0c;让各位感受一下程序设计的魅力&#xff0c;并祝贺各位同学在本次比赛中取得好成绩。 注&#xff1a;各位同学只需将输入样例里的代码复制到右侧编译器&#xff0c;然后直…

电子作业指导书系统如何提高作业人员的培训效率和作业规范

在现代制造业中&#xff0c;提高生产效率和产品质量是企业不断追求的目标。而对于车间员工来说&#xff0c;如何提高生产培训效率和作业规范是一个重要的问题。电子作业指导书系统作为一种新型的生产管理工具&#xff0c;可以有效提高车间员工的生产培训效率和作业规范。本文将…

maven 将Jar包安装到本地仓库

window系统&#xff1a; 注意事项&#xff1a;在windows中&#xff0c;使用mvn指令将jar安装到本地仓库时&#xff0c;一定要将相关资源使用“"”包裹上&#xff0c;不然会报下面的错&#xff1a; mvn install:install-file "-DfileD:\BaiduNetdiskDownload\qianzixi…

全球服的游戏服务器架构设计

全球服的游戏服务器架构设计 版权声明 本文为“优梦创客”原创文章&#xff0c;您可以自由转载&#xff0c;但必须加入完整的版权声明 文章内容不得删减、修改、演绎 相关学习资料见文末 主题 常见服务器端架构划分 不同类型游戏的架构选择与瓶颈 如何设计通用、可伸缩的…

python 爬百度热搜并生成词云

1、爬取百度body存入txt def get_baidu_hot():url "https://top.baidu.com/board?tabrealtime"headers {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.3&…

定制手机套餐---python序列

if __name__ __main__:print("定制手机套餐")print("")#定义电话时长&#xff1a;字典callTimeOptions{1:0分钟,2:50分钟,3:100分钟,4:300分钟,5:不限量}keyinput("请输入电话时长的选择编号&#xff1a;")valuecallTimeOptions.get(key)if val…

看完就会,从抓包到接口测试的全过程解析【1500字保姆级教程】

一、为什么抓包 1、从功能测试角度 通过抓包查看隐藏字段 Web 表单中会有很多隐藏的字段&#xff0c;这些隐藏字段一般都有一些特殊的用途&#xff0c;比如收集用户的数据&#xff0c;预防 CRSF 攻击&#xff0c;防网络爬虫&#xff0c;以及一些其他用途。这些隐藏字段在界面…

中国上市公司漂绿程度及其同构指数(多种测算方法,2012-2022年)

数据简介&#xff1a;20 世纪 90 年代开始&#xff0c;国际上关于绿色市场和绿色管理的学术文献日渐丰富&#xff0c;众多企业积极响应碳排放政策的号召&#xff0c;但其中有多少企业是实实在在的进行碳减排技术创新&#xff0c;又有多少企业打着绿色低碳行为的口号来吸引眼球、…

举个栗子!Quick BI 技巧(4):创建面积图

面积图又叫区域图&#xff0c;是在折线图的基础之上形成的, 它将折线图中折线与自变量坐标轴之间的区域使用颜色或者纹理填充&#xff0c;这样一个填充区域我们叫做面积&#xff0c;颜色的填充也可以更好的突出趋势信息。 有数据粉好奇如何使用 Quick BI 来制作面积图&#xf…

CAD图纸管理软件是否支持自定义属性?

CAD图纸管理软件是否支持自定义属性&#xff1f; 彩虹图纸管理软件_图纸管理系统_图纸文档管理软件系统_彩虹EDM【官网】 CAD图纸管理软件 是一种专业用于管理CAD图纸的工具&#xff0c;它可以帮助用户更加方便地管理、分类和检索自己的CAD图纸。在这个软件中&#xff0c;自定…

沃趣班11月月考题目解析

沃趣班11月月考题目解析 1.在oracle中创建用户时&#xff0c;若未设置default tablespace关键字&#xff0c;则oracle将哪个表空间分配给用户作为默认表空间 答案&#xff1a;D.user SQL> create user mytest identified by 123456; SQL> grant connect to mytest; SQL…

【开源】基于Vue和SpringBoot的独居老人物资配送系统

项目编号&#xff1a; S 045 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S045&#xff0c;文末获取源码。} 项目编号&#xff1a;S045&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询社区4…

色彩 (3)AWB问题

#灵感# AWB 的问题&#xff0c;说难其实也不是很难。 前提&#xff1a; 对于特定的光信号输入&#xff0c;设备的输出信号取决于RGB三通道的频率响应&#xff0c;不同的sensor频率响应一般是不同的。QE曲线描述的就是图像传感器的光电转换效率. 1、灰区设置 标定用标准光源灯…

应用场景丨隧道健康监测系统建设,提高隧道的应急措施

在繁忙的城市交通中&#xff0c;隧道作为重要的枢纽&#xff0c;每天承载着大量的车流和人流。然而&#xff0c;隧道内部的环境和结构状况往往难以掌握&#xff0c;给交通安全带来了潜在的隐患。为了解决这一问题&#xff0c;建立隧道健康监测系统势在必行。 根据《交通运输部关…

【Unity入门】碰撞检测

碰撞器由来 1.系统默认会给每个对象(GameObject)添加一个碰撞组件(ColliderComponent)&#xff0c;一些背景对象则可以取消该组件。 2.在unity3d中&#xff0c;能检测碰撞发生的方式有两种&#xff0c;一种是利用碰撞器&#xff0c;另一种则是利用触发器。这两种方式的应用非…

pcr扩增原理中的变性 退火 延申扩增

一、PCR简介 聚合酶链式反应&#xff08;PCR&#xff09;是一种用于放大扩增特定的DNA片段的分子生物学技术&#xff0c;它可看作是生物体外的特殊DNA复制&#xff0c;PCR的最大特点是能将微量的DNA大幅增加。 二、PCR原理 1.背景 DNA的半保留复制是生物进化和传代的重要途…