Java学习25--自定义异常

自定义异常class

自定义异常通常要配合 override “toString”命令,其实质是一个会报错的method,像一个交通违章通报LED,但何时被触发,如何算是违反交通,并不会在此class定义。

  1. 自定义异常class的步骤:
  • 自建个异常类,继承自Exception总父类
  • 类里面处理一些你觉得可能会出现异常的问题
  • 最后把这个消息打印出来(toString)
注意这里的toString是继承自总类Object class下面的toString method,由用户在本级完成override,一般构建自定义异常在这一步都会用到toString method来帮忙输出提示个性化的信息。

比如新建一个叫做report_age_error的用户自定义exception,如果用户输入了0-130以外的年龄,那么我们就触发这个自定义exception class。

注意自定义exception仅仅是定义“通告批评”的内容,而不是在定义何人何时何地为什么会被“通告批评”。


package exception.demo02;public class report_age_error extends Exception{private int p_age;public report_age_error(int age) {this.p_age=age;}@Overridepublic String toString() {return "输入值为:"+p_age+",输入不合法.";}}

常用的IDEA快捷键:

  • Alt+Insert打开构造器constructor
  • 遇见红色波浪线,按住alt+enter,看报错提示。

使用自建的自定义异常class

刚刚建立好了自定义异常class,现在来构建判断异常被激活的method。
上一步建立了“通告批评公示内容”,现在来建立一个”通告批评被触发“的规则(这一步一般会出现 if XXX语句)。

比如定义了一个叫做checkage的method,位于valid_age_detect class文件之内,checkage method的功能是当age超过130或者小于0时,触发刚才建立的report_age_error class,或者age为正常范围时,就打印输出“正常”。


package exception.demo02;public class valid_age_detect{//定义一个“checkage” method,用来检查输入的年龄是否合法public static void checkage(int age) throws report_age_error {if (age > 130 || age <= 0) {throw new report_age_error(age);} else {System.out.println("输入的年龄:" + age + "已录入。");}}
}

Tips: 如果碰到了“Unhandled exception”错误
如果在main方法中捕获了一个异常并且直接再次抛出它,main方法本身就需要声明抛出这个异常。main方法是程序的入口点,所以如果没有其他代码来调用main方法并处理这个异常,那么当main方法抛出异常时,Java运行时环境就会认为这是一个未处理的异常,并报告错误。
要解决这个问题,你有几个选择:

  • 在main方法上声明抛出异常(使用throws关键字)
  • 在catch块中处理异常:你可以在catch块中记录错误信息、打印错误消息给用户、或者采取其他恢复措施。而不是直接抛出它。
    类似这样
try {  // ...  
} catch (MyErr e) {  System.err.println("发生错误: " + e.getMessage());  // 其他处理逻辑  
}

下面用main模块来使用上面自建的checkage method和report_age_error class。


package exception.demo02;public class Test
{public static void main(String[] args) throws report_age_error{try {valid_age_detect.checkage(50);} catch (report_age_error e) {throw e;}try {valid_age_detect.checkage(150);} catch (report_age_error e) {//e.printStackTrace();可以用这一行直接打印错误提示信息throw e;//如果在这里想要用throw e 自定义的exception_object,必须要main程序在标题throws声明 自定义的report_age_error class文件://类似这样 main(String[] args) throws report_age_error{...}//否则编译通过不了}}}
输入的年龄:50已录入。
Exception in thread "main" 输入值为:150,输入不合法.at exception.demo02.valid_age_detect.checkage(valid_age_detect.java:7)at exception.demo02.Test.main(Test.java:39)Process finished with exit code 1

程序中使用user_exception class的步骤:

  • 创建自定义user_exception class(一定要继承系统自带的exception class!!!)
  • 在method内部写throw关键字抛出exception object
  • 如果在当前抛出exception的method里处理exception,可以使用try catch捕获并处理。否则就在method的声明处(method 名字旁边)通过throws关键字,并且写上要抛出给method调用方的exception,继续进行下一步操作
  • main方法为一般为最高阶,如果已经自定义了异常类,在main里想throw这个自定义异常,需要在main方法签名处利用throws声明这个异常类。
  • main主程序通过调用method捕获并处理异常

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

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

相关文章

机械臂目标抓捕学习笔记【1】

基于概率量度的机械臂视觉伺服目标捕获运动规划方法 目录 基于概率量度的机械臂视觉伺服目标捕获运动规划方法期望轨迹序列状态转移函数系统测量值模型线性化卡尔曼滤波状态估计代价函数-闭环反馈轨迹误差方差误差几何化表示到达概率计算 参考文献&#xff1a;《[1]祁若龙,邵健…

直接查看电脑几核芯几线程的方法

之前查看电脑几核芯几线程时都是点击 此电脑->属性->设备管理器->处理器 但是这样并不能判断是否有多线程 譬如这里&#xff0c;是2核芯2线程还是4核芯&#xff1f; 实际上&#xff0c;打开任务管理器后点击性能查看核芯线程数即可 所以示例这台电脑是4核芯而不是2…

鸿蒙实战:ArkTs 开发一个鸿蒙应用

学习过的 ArkTs 知识点&#xff0c;一步一步开发一个小的鸿蒙应用示例&#xff0c;涉及到 ArkTs 语法、注解 Entry 、 Component、state、路由、生命周期、Prop、 Link 、常用组件的使用等等知识点。 要开发一个鸿蒙应用&#xff0c;首先我们需要知道 系统是如何找到页面的启…

仪表板展示|DataEase看中国:历年研究生报考数据分析

背景介绍 在信息时代的浪潮中&#xff0c;研究生教育作为培养高层次专业人才的重要通道&#xff0c;不断吸引着广大毕业生和在职人士的关注。今天我们结合2018年&#xff5e;2024年的研究生报考数据&#xff0c;以数字为镜&#xff0c;深入了解近年来研究生培养态势。 本文将…

YOLOv8改进 | 进阶实战篇 | 利用辅助超推理算法SAHI推理让小目标无所谓遁形(支持视频和图片)

欢迎大家订阅我的专栏一起学习YOLO! 一、本文介绍 本文给大家带来的是进阶实战篇,利用辅助超推理算法SAHI进行推理,同时官方提供的版本中支持视频,我将其进行改造后不仅支持视频同时支持图片的推理方式,SAHI主要的推理场景是针对于小目标检测(检测物体较大的不适用,…

IP详细地理位置查询:技术原理与应用实践

IP地址是互联网上设备的唯一标识&#xff0c;在网络安全、个性化服务等领域具有重要意义。通过IP详细地理位置查询&#xff0c;可以获取到IP地址所在地的具体信息&#xff0c;为网络管理、定位服务等提供支持。IP数据云将深入探讨IP详细地理位置查询的技术原理、应用实践以及相…

Linux——进程替换

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、进程程序替换1、替换原理2、替换函数3、函数解释4、命名理解 二、用例测试1、execl测试2、…

Hive中几种常见的表

Hive的表类型主要有&#xff1a;内部表&#xff08;受控表/管理表&#xff09;、外部表、临时表、分区表、分桶表。 1. 内部表&#xff08;管理表&#xff09; 默认创建的表都是管理表/内部表&#xff0c;表数据默认存储在warehouse目录中&#xff0c;在加载数据的过程中&…

GB 23864-2023 防火封堵材料检测

防火封堵材料是指具有防火&#xff0c;防烟功能&#xff0c;用于密封或填塞建筑物、构筑物以及各类设施中的贯穿孔洞、环形缝隙及建筑缝隙&#xff0c;便于更换且符合有关性能要求的材料。 GB 23864-2023 柔性有机堵料等防火封堵料的理化性能&#xff1a; 测试项目 测试方法 …

【PX4-AutoPilot教程-TIPS】Gazebo仿真环境昏暗的解决办法即Ubuntu系统安装NVIDIA显卡驱动方法

Gazebo仿真环境昏暗的解决办法即Ubuntu系统安装NVIDIA显卡驱动方法 分析原因手动安装方法&#xff08;推荐&#xff09;自动安装方法检查是否安装成功Gazebo仿真环境前后对比 分析原因 具体原因为&#xff1a;大多数情况是因为显卡性能不足&#xff0c;Gazebo自动关闭了灯光和…

说一下JVM创建对象的流程?

一、类加载检查。 在实例化一个对象的时候&#xff0c;JVM 首先会去检查目标对象是否已经被加载并初始化了。如果没有&#xff0c;JVM 需要立刻去加载目标类&#xff0c;然后调用目标类的构造器完成初始化。然后初始化的过程&#xff0c;主要是对目标类里面的静态变量、成员变…

【CANoe示例分析】EthernetTC8Test

1、工程路径 C:\Users\Public\Documents\Vector\CANoe\Sample Configurations 15.3.89\Ethernet\Test\EthernetTC8Test 在CANoe软件上也可以打开此工程:File|Help|Sample Configurations|Ethernet Testing|TC8Test(Ethernet) 2、示例目的 TC8示例是作者本人使用最多的CANo…

三、滑动窗口问题

3、无重复字符的最长子串&#xff08;中等&#xff09; 题目描述 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”&#xff0c;所以其长度为 3。 示例 2: 输…

代码随想录day26--贪心基础

什么是贪心 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优 举个例子&#xff1a; 有一堆钞票&#xff0c;可以拿走十张&#xff0c;如果想要达到最大的金额&#xff0c;应该怎么拿&#xff1f; 指定每次拿最大的&#xff0c;最终结果就是拿走最大数额的…

计算机视觉发展的方向和潜在机会

计算机视觉发展的方向 文章目录 计算机视觉发展的方向计算机视觉发展的方向潜在机会 计算机视觉发展的方向 未来计算机视觉发展的方向可能包括以下几个方面&#xff1a; 深度学习和神经网络&#xff1a;深度学习已经成为计算机视觉领域的重要技术&#xff0c;未来将继续深入研…

MySQL安装、配置与卸载教程(Windows版)

MySQL是一个关系型数据库管理系统&#xff0c;目前为Oracle旗下产品&#xff0c;它具有开源、体积小、速度快的优点&#xff0c;许多网站使用的都是MySQL数据库。 简单而言&#xff0c;MySQL数据库核心功能就是用来存储数据的。 MySQL数据库分为社区版和商业版&#xff0c;这…

idea将文件加入到SVN

文件右键Subversion->Add to Vcs Settings->Version Control->Confirmation 勾上Add silently ,每次自动添加就不用一个个加了

计算机视觉学习指南(划分为20个大类)

计算机视觉的知识领域广泛而庞杂&#xff0c;涵盖了众多重要的方向和技术。为了更好地组织这些知识&#xff0c;我们需要遵循无交叉无重复&#xff08;Mutually Exclusive Collectively Exhaustive&#xff0c;MECE&#xff09;的原则&#xff0c;并采用循序渐进的方式进行分类…

ajax 如何从服务器上获取数据?

在Web开发中&#xff0c;AJAX&#xff08;Asynchronous JavaScript and XML&#xff09;是一种常用的技术&#xff0c;用于在不重新加载整个页面的情况下&#xff0c;从服务器获取数据并更新网页的某一部分。使用AJAX&#xff0c;你可以创建异步请求&#xff0c;从而提供更快的…

文件上传漏洞--Upload-labs--Pass02--Content-Type绕过

一、什么是 Content-Type 我们在上传文件时利用 Burpsuite 进行抓包&#xff0c;如下图所示&#xff1a; 上传文件后台的源代码可能会对 Content-Type 进行规定&#xff0c;设置白名单 或 黑名单&#xff0c;这时就要利用Content-Type绕过上传含有恶意代码的 php文件。 二、代…