异常(中)创建自定义异常,throw,throws关键字抛出异常

news2025/2/9 4:08:31

文章目录

  • 前言
  • 一、创建自定义异常
  • 二、在方法中抛出异常
    • 1.使用throw关键字抛出异常
    • 2.使用throws关键字抛出异常
  • 总结

前言

        该文介绍了Java的异常的创建自定义异常,让我们可以自己创建出一个异常,应对Java API中没有的基础的异常报错。throw关键字抛出异常,throws关键字抛出异常,是不同于try-catch语句的另一种抛出异常的方式。


一、创建自定义异常

        创建自定义异常:自己创建一个应对可以反馈不符合项目需求或现实的异常,应对Java API中基础异常报错没有的情况。

         语法:

class 自定义异常类 extends 已有的异常类{
    public 自定义异常类(){
        //创建了一个构造方法,通过 super 关键字调用父类构造方法,反馈不符合的新异常
        super();
    }
}

         实例:

                一家无人餐厅中服务一个人时,若顾客不是一个人,而是动物,此异常需要抛错,而Java API中基础异常报错没有此异常,需要我们自定义一个异常。

        创建一个NoHumansException异常类,应对该无人餐厅的异常:

public class NoHumansException extends Exception{
	
	public NoHumansException(String message) {
	    //创建了一个构造方法,通过 super 关键字调用父类构造方法,反馈不符合的新异常
    	super(message);
	}
}

         在项目中调用此异常:

public class Demo {
	public static void main(String[] args) {
		try {
			String customer = "monkey";
			if(!customer.equals("human")) {
                //通过 throw 关键字实例化 创建的 NoHumansException 异常类
				throw new NoHumansException("有非人客户:"+customer);
			}
			System.out.println("上菜");
		} catch (NoHumansException e) {
			//输出 try 代码块中捕获的异常,相关的异常内容,报错位置
			e.printStackTrace();
		}
	}
}

         输出结果:

         总结:

                 使用自定义异常步骤:

                (1)创建自定义异常。

                (2)在方法中通过 throw 关键字抛出异常对象。

                (3)若在当前抛出异常的方法中处理异常,可以使用 try-catch 语句块捕获并处理,否则在方法的声明处通过 throws 关键字指明要抛出给方法调用者的异常,继续进行下一步操作。

                (4)在出现异常方法的调用者中捕获并处理异常。

二、在方法中抛出异常

         前要:若某个方法可能会发生异常,若不想在当前方法中处理这个异常,则可以使用 throw 、throws 关键字在方法中抛出异常。

1.使用throw关键字抛出异常

        定义:throw 关键字通常用于方法体中,并且抛出一个异常对象。

        语法:

throw new 异常类型(报错内容);

        特点:

                (1)程序运行至 throw 语句时,立即停止执行后面的语句(所在代码块中的语句)。

                (2)通过 throw 抛出异常后,如果想在上一级代码中捕获并处理异常,则需要在抛出的异常的方法中使用 throws 关键字。

                (3)如果要捕捉 throw 抛出的异常,反馈在控制台中,则必须使用 try-catch 语句块。

        实例:

        在统计人数时,人数是大于零的一个值,当人数这个值为负数时,应当报错。虽然运行过程中不会自动报错,但我们可以通过throw关键字抛出实现报错。                

public class ThrowDemo {
	public static void main(String[] args) {
        //定义 人数 为 count 对象
		int count = -100;
		try {
			if(count < 0) {
				//人数小于零时,抛出该异常,终止try代码块中的程序
				throw new ArithmeticException("人员数量是负数"+count);
			}
			System.out.println("当前统计的人数为:"+count);			
		}catch(Exception e) {
			//调用printStackTrace()方法,在控制台中反馈抛出的异常性质,内容,位置
			e.printStackTrace();
		}
	}
}

        输出结果:

 

2.使用throws关键字抛出异常

        定义:throws 关键字通常被应用在声明方法时,用来指定方法可能抛出的异常(大部分起到警示这个方法中异常的作用)。

        语法:

public void method() throws 异常类型1,异常类型2,…,异常类型n{

}

         特点:

                (1)使用 throws 关键字将异常抛给上一级后,如果不想处理该异常,可以继续向上抛出,但最终要处理该异常的代码

                (2)多个异常可使用逗号分隔 , 

                (3)如果是Error、RuntimeException或它们的子类,可以不使用 throws 关键字来声明要抛出的异常,编译仍能顺利通过,但在运行时会被系统抛出。

        实例: 

public class ThrowsDemo {
	
    //在定义 show()方法时,使用 throws 关键字,抛出异常
	public static void show() throws ArithmeticException,Exception{
		for(int i = 0;i<10;i++) {
			int b = 1/0;
            //此处运算,除数不能为零,发生异常
		}
	}
	
	public static void main(String[] args) {
		//try-catch语句反馈处理异常
        try {
			show();
		} catch (Exception e) {
			//在控制台中反馈出异常的信息
            System.out.println("异常:除数不能为零!");
			System.out.println(" 请程序员尽快解决!");
			e.printStackTrace();
		}
	}
}

         输出结果:

         由此可知,不管是throw,throws,或者try-catch语句,它们并不没有修正BUG的能力,最多的用处是反馈,推测项目中发生了什么BUG。它们只是程序员去检测,推敲,修改BUG的辅助工具。具体的BUG需要我们亲自动手处理,不要偷懒。


总结

        此篇博客介绍了异常中自定义异常的创建,throw,throws关键字的使用,如果对本文中有疑惑或者补充,指正的想法,欢迎在评论区中留言,博主会及时回复的。

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

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

相关文章

【服务平台】Rancher运行和管理Docker和Kubernetes,提供管理生产中的容器所需的整个软件堆栈

Rancher是一个开源软件平台&#xff0c;使组织能够在生产中运行和管理Docker和Kubernetes。使用Rancher&#xff0c;组织不再需要使用一套独特的开源技术从头开始构建容器服务平台。Rancher提供了管理生产中的容器所需的整个软件堆栈。  完整软件堆栈 Rancher是供采用容器的团…

7款轻量级平面图设计软件推荐

平面图设计的痕迹体现在日常生活的方方面面&#xff0c;如路边传单、杂志、产品包装袋或手机开屏海报等&#xff0c;平面设计软件层出不穷。Photoshop是大多数平面图设计初学者的入门软件&#xff0c;但随着设计师需求的不断提高&#xff0c;平面图设计软件Photoshop逐渐显示出…

Ajax 笔记(四)—— Ajax 进阶

笔记目录 4. Ajax 进阶4.1 同步代码和异步代码4.2 回调函数地狱4.2.1 解决方法一&#xff1a;Promise 链式调用4.2.2 解决方法二&#xff1a;async 函数和 await 4.3 Promise.all 静态方法4.4 事件循环4.4.1 事件循环4.4.2 宏任务与微任务 4.5 案例4.5.1 案例一-商品分类4.5.2 …

“反AI斗士”马斯克宣布成立xAI :目标是了解宇宙真实本质

北京时间7月13日凌晨&#xff0c;马斯克在Twitter上宣布&#xff1a;“xAI正式成立&#xff0c;去了解现实。”马斯克表示&#xff0c;推出xAI的原因是想要“了解宇宙的真实本质”。Ghat GPT横空出世已有半年&#xff0c;国内外“百模大战”愈演愈烈&#xff0c;AI大模型的现状…

【golang】数组和切片底层原理

数组类型的值&#xff08;以下简称数组&#xff09;的长度是固定的&#xff0c;而切片类型的值&#xff08;以下简称切片&#xff09;是可变长的。 数组的长度在声明它的时候就必须给定&#xff0c;并且之后不会再改变。可以说&#xff0c;数组的长度是其类型的一部分。比如&a…

jQuery编程学习3(jQuery 其他方法: jQuery 拷贝对象、 jQuery 多库共存、jQuery 插件)

目录 jQuery 其他方法 1. jQuery 拷贝对象 $.extend()方法 2. jQuery 多库共存 问题概述&#xff1a; 客观需求&#xff1a; jQuery 解决方案&#xff1a;&#xff08;两种方式&#xff09; 3. jQuery 插件 jQuery 插件常用的网站&#xff1a; jQuery 插件使用步骤&…

Python-组合数据类型

今天要介绍的是Python的组合数据类型 整理不易&#xff0c;希望得到大家的支持&#xff0c;欢迎各位读者评论点赞收藏 感谢&#xff01; 目录 知识点知识导图1、组合数据类型的基本概念1.1 组合数据类型1.2 集合类型概述1.3 序列类型概述1.4 映射类型概述 2、列表类型2.1 列表的…

用python来爬取某鱼的商品信息(1/2)

目录 前言 第一大难题——找到网站入口 曲线救国 模拟搜索 第二大难题——登录 提一嘴 登录cookie获取 第一种 第二种 第四大难题——无法使用导出的cookie 原因 解决办法 最后 出现小问题 总结 前言 本章讲理论&#xff0c;后面一节讲代码 拿来练练手的&#xff…

【装个系统】教你安装全新Windows 11 全程展示,精彩无限

跟我一起&#xff0c;穿越时间&#xff01; Windows 11是微软最新的操作系统&#xff0c;相信已经没有人不知道了&#xff0c;但是很多人还不知道如何安装Windows 11&#xff0c;甚至不知道如何下载微软原版的安装文件&#xff0c; 别急&#xff0c;如果你没有安装文件&#…

纯C#使用Visionpro工具2 操作斑点工具

结果图 通过斑点工具中非圆性找取圆特征 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.For…

7年经验之谈 —— 软件测试工程师,如何工资过万?

对于测试工程师这个岗位而言&#xff0c;月薪过万并不是一件难事&#xff0c;笔者毕业时的第一份工作便拿到了7K的薪资&#xff0c;如今入职两年&#xff0c;薪资也堪堪过了万元大关。 我周边有不少想要入行这一行业的小伙伴都对我目前的工作和生活状态好奇&#xff0c;在此写一…

系列六、Redis中的五大数据类型及相关操作

一、五大数据类型 String类型、List类型、Set类型、ZSet类型、hash类型。 二、String类型 2.1、内存储存模型 2.2、常用操作命令 三、List类型 3.1、概述 list列表&#xff0c;相当于Java中的list集合。特点&#xff1a;元素有序 且 可以重复。 3.2、内存存储模型 3.3、常用…

Arcgis中POI找到建筑面内距离最近的标准地址通过模型构建器来实现

背景 之前写过一篇文章 Arcgis通过矢量建筑面找到POI对应的标准地址 这里面的大致思路跟本篇文章是类似的&#xff0c;不过上一篇文章有部分有瑕疵&#xff0c;就是在POI去找建筑面内的标准地址时&#xff0c;找到的虽然是建筑面内的&#xff0c;但是不一定是距离最近的&#…

Elasticsearch-查询

一、查询和过滤 1.1 相关性分数 &#xff1a;_score 默认情况下&#xff0c;Elasticsearch 按相关性得分对匹配的搜索结果进行排序&#xff0c;相关性得分衡量每个文档与查询的匹配程度。 相关性分数是一个正浮点数&#xff0c;在搜索的数据字段中返回。_score越高&#xff0…

KAFKA第二课之生产者(面试重点)

生产者学习 1.1 生产者消息发送流程 在消息发送的过程中&#xff0c;涉及到了两个线程——main线程和Sender线程。在main线程中创建了一个双端队列RecordAccumulator。main线程将消息发送给RecordAccumulator&#xff0c;Sender线程不断从RecordAccumulator中拉取消息发送到K…

vant van-tabs van-pull-refresh van-list 标签栏+上拉加载+下拉刷新

<template><div class"huibj"><div class"listtab"><!--顶部导航--><div class"topdh"><topnav topname"余额明细"></topnav></div><!--Tab 标签--><van-tabs v-model"…

126、高频Redis面试题:如何保证Redis和数据库数据一致性

高频Redis面试题:如何保证Redis和数据库数据一致性 缓存用法如何更新缓存先更新缓存&#xff0c;再更新数据库先更新数据库&#xff0c;再更新缓存先删除缓存&#xff0c;再更新数据库延时双删&#xff08;删除缓存&#xff0c;更新数据库&#xff0c;再延时删除缓存&#xff0…

Linux 内存管理新特性 - Memory folios 解读 | 龙蜥技术

本文内容基于 Linux 5.16&#xff0c;folio 基础部分开始合入。截止到目前 Linux 6.5&#xff0c;folio 已经有很大进展&#xff0c;会在后续文章中介绍。作者&#xff1a;徐宇。 01 folio [ˈfoʊlioʊ] 是什么 引用 LWN: Memory folios &#xff1a;https://lwn.net/Articl…

基于Selenium技术方案的爬取界面内容实践

1. 定位页面&#xff08;多窗口切换&#xff09; WebDriver提供了处理多个窗口的能力&#xff0c;这是通过使用“WebDriver.switchTo.window()”方法来切换到已知名称的窗口来实现的。如果名称未知&#xff0c;您可以使用“WebDriver.getWindowHandles()”获取已知窗口列表。您…

苍穹外卖项目解读(五 完结) POI Easyexcel excel操作

前言 HM新出springboot入门项目《苍穹外卖》&#xff0c;笔者打算写一个系列学习笔记&#xff0c;“苍穹外卖项目解读”&#xff0c;内容主要从HM课程&#xff0c;自己实践&#xff0c;以及踩坑填坑出发&#xff0c;以技术&#xff0c;经验为主&#xff0c;记录学习&#xff0…