异常(Exception)

news/2024/5/21 18:39:02/文章来源:https://blog.csdn.net/weixin_67807492/article/details/128019886

随着面向对象的结束,我们的JavaSE也就接近了尾声,还有两个章节没有去梳理,常用类和异常,本章先讲异常,剩下的常用类后面再来补。

废话不多说,直接开始本章的内容。

1. 认识异常

引出: 假设 num1(值为10)/ num2(值为0)这一行代码被执行,那么程序就会崩溃,继而抛出异常:ArithmeticException. 后面的代码不执行。

对我们而言,它只是不小心输入了一个0 作为分母,被一个不算致命的错误导致了整个程序崩溃,是不是不值得?

于是提出了异常、异常处理机制。

在Java中,将程序执行过程中发生的不正常行为称为异常,例如上述提到的

ArithmeticException(算术异常)

ArrayIndexOutOfBoundsException(数组越界异常)

NullPointerException(空指针异常)

我们来看个例子:

从上述过程中可以看到,java的异常,都有与其对应的类来进行描述。

2 异常的体系结构

这是从知乎上找到的一张图;

这是jdk1.8 手册上的;

从上图中我们可以知道:

Throwable:是异常体系的顶层类,其派生出两个重要的子类, Error 和 Exception
Error(错误):指的是Java虚拟机无法解决的严重问题,比如:JVM的内部错误、资源耗尽等,典型代表:StackOverflowError和OutOfMemoryError,一旦发生回力乏术。
Exception:其他因编译错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,试图读取不存在的文件等等。

异常的分类

异常可能在编译时发生,也可能在程序运行时发生,根据发生的时机不同,可以将异常分为:
1. 编译时异常
在程序编译期间发生的异常,称为编译时异常,也称为受检查异常(Checked Exception)
2. 运行时异常
在程序执行期间发生的异常,称为运行时异常,也称为非受检查异常(Unchecked Exception)
RunTimeException以及其子类对应的异常,都称为运行时异常。比如:NullPointerException、ArrayIndexOutOfBoundsException、ArithmeticException。

小结:

🐔异常分为两大类运行运行时异常和编译时异常。

🐔运行时异常编译器检测不出来,一般指编译器的逻辑错误,程序员应该处理。

🐔对于运行异常可以不做处理,因为很普通咯全处理可能影响程序的可读性和运行效率异常时。

🐔编译时异常则必须做处理。

常见的运行时异常:

1. NullPointerException

当然应用程序是否再需要对象的地方使用null时抛出异常。

2. ArithmeticException 

当出现异常的运算条件时,抛出此异常。

3.  ArrayIndexOutOfBoundsException

当访问数组时,访问的下表超出数组的范围,抛出此异常。

4. ClassCastException

当试图将对象强制类型转换为不是实例的子类时,抛出异常。
5. NumberFormatException

 当试图将字符串转化成一种数值类型,但该字符串不能转化为适当格式时抛出异常。

例如:

3 异常的处理

1. try - catch - finally

try - catch - finally在idea上的快捷键为:ctrl + Alt + t

程序员在代码中捕获的异常,自行处理

语法如下:

         try {} catch (Exception e ) {} finally {

解释如下:

try {//可能存在异常的代码
} catch (Exception e /* ”异常类型 参数变量 “,是什么类型就写什么类型,变量可以是任意名字 */) {//当发生异常时,将异常封装Exception 对象e,传给catch,得到异常对象后,程序员自行处理//如果try代码块中的代码没有异常的话,那么catch块中的代码将不执行} finally {//无论rty代码块是否发生异常,finally代码块都必须执行
}//finally块一般用于释放资源,例如IO流中文件的关闭}

 tyr - catch 注意事项

1. 可以没有finally

2. 如果异常发生了,异常代码后的代码就无法执行,直接跳到catch块

3. 不发生异常则不进入catch

4.有多个catch语句,捕获不同的异常(进行不同的业务操作),要求父类异常要在子类异常之后。

例如: Exception类在NullpointException之后

2. 异常的抛出:

在编写程序时,如果程序中出现错误,此时就需要将错误的信息告知给调用者,比如:参数检测。
在Java中,可以借助throw关键字,抛出一个指定的异常对象,将错误信息告知给调用者。具体语法如下:

throw new XXXException("异常产生的原因");

【注意事项】
1. throw必须写在方法体内部
2. 抛出的对象必须是Exception 或者 Exception 的子类对象
3. 如果抛出的是 RunTimeException 或者 RunTimeException 的子类,则可以不用处理,直接交给JVM来处理
4. 如果抛出的是编译时异常,用户必须处理,否则无法通过编译
5. 异常一旦抛出,其后的代码就不会执行

3. throws 处理机制

1. try - catch - finally  和 throws 只能二选一使用

2. 没有显示是处理异常则默认是 throws

4.  自定义异常

自定义异常的步骤:

1. 定义类:自定义异常类名(自己写)必须继承Exception 或者 RuntimeException

2. 如果继承Exception,则属于编译异常

3. 如果继承RuntimeException,则属于运行异常

例如:

public class Main {public static void main(String[] args) throws AgeException {int age = 10;if ( ! (age >= 18) && age <= 120) {throw new AgeException("年龄需要在18~100岁之间");}System.out.println("正确");}
}public class AgeException extends Exception{public AgeException() { //无参构造器}public AgeException(String message) { //有参构造器super(message);}
}

throw 和 throws 的区别

意义位置后面接的东西
throw异常处理的一种方法方法声明处异常类型
throws手动生成异常对象的关键字方法体中异常对象

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

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

相关文章

ArcGIS综合制图教程,简单上手!

目的 1、了解专题地图组成的各个要素&#xff1b; 2、掌握ArcGIS编辑专题图的方法和步骤&#xff1b; 实习内容 使用ArcGIS生成1&#xff1a;200万比例尺的浙江省县级行政区划图&#xff0c;并输出成像文件。 实习步骤 一、将ArcGIS切换到Layout视图&#xff0c;并调整页面…

[附源码]java毕业设计疫情期间物资分派管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

C++初阶(stack+queue)

stack是一种容器适配器&#xff0c;专门用在具有后进先出 (last-in first-out)操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入与提取操作。stack是作为容器适配器被实现的&#xff0c;容器适配器即是对特定类封装作为其底层的容器&#xff0c;并提供一组…

精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的系统服务底层原理以及高性能存储设计挖掘深入

设计背景 消息中间件的本身定义来考虑&#xff0c;应该尽量减少对于外部第三方中间件的依赖。一般来说依赖的外部系统越多&#xff0c;也会使得本身的设计越复杂&#xff0c;采用文件系统作为消息存储的方式。 RocketMQ存储机制 消息中间件的存储一般都是利用磁盘&#xff0…

餐饮+KTV融合消费模式,会受消费者喜欢吗?

这个五一&#xff0c;我们雨科网门店系统的客户&#xff0c;大侠火锅店终于是将KTV搬到了自己的门店里&#xff0c;运用门店小程序功能及纸质代金券及礼品的噱头吸引客户进店&#xff0c;只需消费并和任意一人合唱一首歌即可领取&#xff0c;消费者在等餐或放松的时候一键点歌演…

OneAuth 2022.11.23版本更新内容

2022.11.23版本更新内容&#xff1a; 新增IdP飞书 云目录增加对Group的支持GWA浏览器插件适配性优化自定义授权服务器优化&#xff0c;适应RBAC、ABAC等多种场景授权IdP 北森优化&#xff0c;适配自定义的属性租户的部分试用功能需要联系后台开通其他一些Bug的修复 标题新增 …

PDF预览完整解决方案及各种兼容(VUE版)

PDF预览完整解决方案及各种兼容&#xff08;VUE版&#xff09; PDF预览完整解决方案及各种兼容&#xff08;VUE版&#xff09; - 掘金 前端学习使者正在上传…重新上传取消 2021年11月12日 16:57 阅读 2547 一、利用iframe 就一行代码就够了&#xff0c;只能满足最基本的…

ThinkPHP5目录结构

文章目录一、TP5的框架的下载1、[采用fastAdmin安装](https://www.fastadmin.net/download.html)2、Composer安装2.1 Composer提供的服务3、Git安装二、使用Composer安装后目录结构2.1 补充获取 Git 仓库git的工作机制一、TP5的框架的下载 1、采用fastAdmin安装 FastAdmin是一…

运营版uniapp多商户商城小程序+H5+APP+商家入驻短视频社区种草直播阶梯拼团

运营版uniapp多商户商城小程序H5APP商家入驻短视频社区种草直播阶梯拼团 前后端全套源码&#xff0c; 支持二次开发&#xff0c;代码无加密&#xff01; 独立商家后台 用于店铺商品管理订单管理发货管理等 多类经营模式 多商家B2B2C、自营B2C运营模式 私有化部署 前端Uni…

JVM类加载(类加载过程、双亲委派模型)

系列文章目录 JVM的内存区域划分_crazy_xieyi的博客-CSDN博客 文章目录 一、类加载过程二、关于类加载的典型试题三、双亲委派模型一、类加载过程 对于一个类来说&#xff0c;它的生命周期是这样的&#xff1a;1.加载 “加载”&#xff08;Loading&#xff09;阶段是整个“类加…

spring 如何解决循环依赖

什么是循环依赖 A 类中有一个属性 B &#xff0c;也就是说 A 依赖 B&#xff0c;同时 B 类中有一个属性 A, 也就是说 B 依赖 A. 他们之间的依赖关系形成了环。就是我们说的循环依赖&#xff0c;如下图&#xff1a; 循环依赖示例 public class CircularDependenciesDemo {publ…

SSM基于上述环境实现简单CUDA操作

目录 1. 结构 2. 环境&#xff1a; 3. controller 4. mapper 5. service 6. serviceImpl 7. mapper.xml 8. emplist.html 9. update 1. 结构 2. 环境&#xff1a; SSM整合 Spring SprintMVC Mybatishttps://blog.csdn.net/qq_41950447/article/details/128033971 3.…

Android -- 每日一问:Activity的启动模式(launchMode)有哪些,有什么区别?

经典回答 这应该是一道很虐人的面试题&#xff0c;很多人都答不上来&#xff0c;很多人根本就没有用过。当我发现在被我面试的人中有80%的比例对它不了解时&#xff0c;我找过一些同事讨论是否还有在面试中考查这个问题的必要&#xff0c;得到的回答是“程序员何苦为难程序员”…

2020-RKT

2020-RKT&#xff1a;Relation-Aware Self-Attention for Knowledge Tracing 有代码&#xff1a;https://github.com/shalini1194/RKT 摘要 学生在解决练习的过程中获得技能&#xff0c;每一次这样的互动都对学生解决未来练习的能力有明显的影响。 这种影响表现为:1)互动中涉…

电脑c盘满了怎么清理,快速清理,用这5招

​新买的电脑没用多久&#xff0c;突然发现系统提示磁盘空间不足。点击一看&#xff0c;电脑c盘空间已经爆满变红。当出现这种情况时&#xff0c;很多电脑的运行速度会大大降低&#xff0c;甚至导致部分应用无法正常运行。那么电脑c盘满了怎么清理&#xff1f;如何释放电脑c盘空…

C语言:关键字----switch、case、default(开关语句)

C语言&#xff1a;基础开发----目录 C语言&#xff1a;关键字—32个(分类说明) 有32个关键字详细说明&#xff0c;还有跳转链接&#xff01; 一、开关语句----介绍 开关语句&#xff0c;包括以下四种关键字&#xff1a; switch&#xff1a;开关语句case&#xff1a; 开关语句…

【vim】系统剪切板、vim寄存器之间的复制粘贴操作命令?系统剪切板中的内容复制粘贴到命令行?vim文本中复制粘贴到命令行

一、系统剪切板和文本内容的复制粘贴 1.1 从系统剪切板复制粘贴到文本中 需要操作3次&#xff1a; 分别是英文双引号、一个加号或梅花号&#xff0c;最后是一个p 也即"p 或者直接使用组合键【Shift insert】 1.2 从文本复制粘贴到系统剪切板 也需要操作3次&#xff…

java EE初阶 — 计算机工作原理

文章目录1.操作系统2.操作系统的定位3.进程3.1 进程的基本了解3.2 操作系统内核是如何管理软件资源的3.3 PCB里描述了进程的哪些特征3.3.1 三个较为简单的特征3.3.2 进程的调度属性4.内存管理1.操作系统 操作系统是一个搞管理的软件。 对上要给软件提供稳定的运行环境。对下要…

基于JAVA的鲜花店商城平台【数据库设计、源码、开题报告】

数据库脚本下载地址&#xff1a; https://download.csdn.net/download/itrjxxs_com/86427660 摘要 在互联网不断发展的时代之下&#xff0c;鲜花软件可以为鲜花企业带来更多的发展机会&#xff0c;让企业可以挖掘到更多的潜在用户&#xff0c;同时结合企业的优势就能够为用户…

Swin Transformer目标检测实验——环境配置的步骤和避坑

Swin Transformer1. 网上基础教程&#xff08;带视频讲解&#xff09;2. 配置虚拟环境时遇到的一些问题&#xff08;按操作顺序排列&#xff09;1. 网上基础教程&#xff08;带视频讲解&#xff09; 大家是不是都从b站来的呀&#xff0c;先给你们基础环境的配置和搭配的视频教…