JAVA SE -- 第十一天

(全部来自“韩顺平教育”)

异常-Exception

一、异常介绍

1、基本介绍

Java语言中,将程序执行中发生的不正常情况为“异常”(开发过程中的语法错误和逻辑错误不是异常)

2、执行过程中发生的异常事件可分为两大类

①Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverflowError[栈溢出]和OOM(out of memory),Error事严重错误,程序会崩溃

②Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等等,Exception分为两大类:运行时异常[程序运行时,发生的异常]和编译时异常[编程时,编译器检查出的异常]

3、异常体系图

 小结:

①异常分为两大类,运行时异常和编译时异常

②运行时异常,编译器检查不出来。一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RunntimeException类及它的子类都是运行时异常

③对于运行时异常,可以不作处理,因为这类异常很普通,若全处理可能会对程序的可读性和运行效率产生影响

④编译时异常,是编译器要求必须处置的异常

二、常见的运行时异常包括

1)NullPointException空指针异常:

当应用程序试图在需要对象的地方使用null时,抛出异常

    

2)ArithmeticException数学运算异常

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

3)ArrayIndexOutOfBoundsException   数组下标越界异常

用非法索引访问 数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引

4)ClassCastException类型转换异常

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

 

5)NumberFormatException数字格式不正确异常

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

 

三、编译异常

指在编译期间,就必须处理的异常,否则代码不能通过编译

1、常见的编译异常

1)SQLException:操作数据库时,查询表可能发生异常

2)IOException:操作文件时,发生的异常

3)FileNotFoundException:当操作一个不存在的文件时,发生异常

4)ClassNotFoundException:加载类,而该类不存在时,异常

5)EOFException:操作文件,到文件末尾,发生异常

6)IIIegalArguementException:参数异常

四、异常处理

当异常发生时,对异常处理的方式

1、异常处理的方式

①try-catch-finally

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

②throws

将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM

2、示意图

 3、try-catch异常处理

①Java提供try和catch块来处理异常。try块用于包含可能出错的代码。catch块用于处理try块中发生的异常。可以根据需要在程序中有多个try...catch块

②基本语法

try{

        //可疑代码

        //将异常生成对应的异常对象,传递给catch块

}catch(异常){

        //对异常的处理
}

//如果没有finally,语法是可以通过

 ③注意事项

①如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块

②如果异常没有发生,则顺序执行try的代码块,不会进入到catch

③如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)

        则使用如下代码 -finally{}

        

        try{

                //可疑代码

        }catch(异常){

                //...
        }finally{

               //释放资源等...

        }

④可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception在后,NullPointerException在前),如果发生异常,只会匹配一个catch

⑤可以进行try-finally配合使用,这种用法相当于没有捕获异常,因此程序会直接崩溃/退出。应用场景,就是执行一段代码,不管是否发生异常,都必须执行某个业务逻辑

④小结

1)如果没有出现异常,则执行try块中所有语句,不执行catch块中语句,如果有finally,最后还需要执行finally里面的语句

2)如果出现异常,则try块中异常发生后,try块剩下的语句不再执行。将执行catch块中的语句,如果有finally,最后还需要执行finally里面的语句

 4、throws异常处理

①基本介绍

1)如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常继续宁处理,而由该方法的调用者负责处理

2)在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异常类型可以是方法中产生的异常类型,也可以是它的父类

②注意事项

1)对于编译异常,程序中必须处理,比如try-catch或者throws

2)对于运行时异常,程序中如果没有处理,默认就是throws的方式处理

3)子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型

4)在throws过程中,如果有try-catch,就相当于处理异常,就可以不必throws

 

五、自定义异常

1、基本概念

当程序中出现了某些“错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息

2、自定义异常的步骤

①定义类:自定义异常类名(程序员自己写)继承Exception或RuntimeException

②如果继承exception,属于编译异常

③如果继承RuntimeException,属于运行异常(一般来说,继承RuntimeException)

 

六、throw和throws

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

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

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

相关文章

FPGA2-采集OV5640乒乓缓存后经USB3.0发送到上位机显示

1.场景 基于特权A7系列开发板,采用OV5640摄像头实时采集图像数据,并将其经过USB3.0传输到上位机显示。这是验证数据流能力的很好的项目。其中,用到的软件版本,如下表所示,基本的硬件情况如下。该项目对应FPGA工程源码…

图注意力网络论文详解和PyTorch实现

图神经网络(gnn)是一类功能强大的神经网络,它对图结构数据进行操作。它们通过从节点的局部邻域聚合信息来学习节点表示(嵌入)。这个概念在图表示学习文献中被称为“消息传递”。 消息(嵌入)通过多个GNN层在图中的节点之间传递。每个节点聚合来自其邻居的消息以更新其…

MyBatis(二)

文章目录 一.MyBatis的模式开发1.1 定义数据表和实体类1.2 配置数据源和MyBatis1.3 编写Mapper接口和增加xxxMapper.xml1.4 测试我们功能的是否实现. 二. Mybatis的增删查改操作2.1 单表查询2.2 多表查询三.动态SQL的实现3.1 什么是动态SQL3.2 动态SQL的使用if标签的使用trim标…

M1/M2 通过VM Fusion安装Win11 ARM,解决联网和文件传输

前言 最近新入了Macmini M2,但是以前的老电脑的虚拟机运行不起来了。😅,实际上用过K8S的时候,会发现部分镜像也跑不起来,X86的架构和ARM实际上还是有很多隐形兼容问题。所以只能重新安装ARM Win11,幸好微软…

Spring整合junit

1、导入pom坐标 <dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.springframework</gro…

【LeetCode】169.多数元素

题目 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 示例 1&#xff1a; 输入&#xff1a;nums [3,2,3] 输出&#xff1a;3…

【MySQL】表的操作

今天我们来谈谈MySQL下对表的操作 目录 一、创建表 二、查看表 2.1 查看库中存有的表 2.2 查看表结构 2.3 查看表的创建语句 三、修改表 3.1 重命名表名 3.2 新增列 3.3 修改列的数据类型 3.4 删除列 3.5 重命名列 四、删除表 一、创建表 我们要想在数据库中创建…

SpringMvc+阿贾克斯

0目录 1.SpringMVC 加阿贾克斯 2.分页版 1.实战 创建数据库 创建工程和pom依赖 配置web.xml和applicationContext.xml 实体类 Mapper接口方法 Mapper.xml BookService BookSeriviceImpl 控制层 测试 加入findAll.html 测试 2.分页版 控制层 PostMan测…

华为OD机试真题 Java 实现【AI面板识别】【2023 B卷 100分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明4、控制台输出 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08…

Redis旁路缓存,大KEY

Redis 旁路缓存 由于高并发原因&#xff0c;先更新数据库和先更新缓存策略都会因为延迟时间而导致数据不一致问题。 两种策略 先删除缓存&#xff0c;再更新数据库&#xff1b;先更新数据库&#xff0c;再删除缓存。 因为缓存的写入通常要远远快于数据库的写入&#xff0c;…

nginx 反向代理浅谈

前言 通常情况下&#xff0c;客户端向Web服务器发送请求&#xff0c;Web服务器响应请求并返回数据。而在反向代理中&#xff0c;客户端的请求不直接发送到Web服务器&#xff0c;而是发送到反向代理服务器。反向代理服务器会将请求转发给真实的Web服务器&#xff0c;Web服务器响…

MySQL - 报错问题解决

1、[HY000][1290] 错误信息"[HY000][1290] MySQL服务器使用了–secure-file-priv选项&#xff0c;因此无法执行此语句"表示MySQL服务器已配置启用了–secure-file-priv选项。此选项限制了LOAD DATA INFILE和SELECT INTO OUTFILE语句可以读取或写入文件系统的位置。默…

【C++】STL中stack,queue容器适配器的模拟实现(使用deque容器)

文章目录 前言一、deque的一些基本知识相比vector&#xff1a;相比list&#xff1a;3为什么选择deque作为stack和queue的底层默认容器 二、stack模拟实现三、queue的模拟实现 前言 STL标准库中stack和queue的底层结构 &#xff1a;虽然stack和queue中也可以存放元素&#xff0c…

java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法

文章目录 一、记录文件相关操作方法二、代码1.读取路径返回List\<File>2.读取路径返回List\<String>3.删除文件夹4.删除文件 一、记录文件相关操作方法 二、代码 1.读取路径返回List<File> import org.slf4j.LoggerFactory; import org.slf4j.Logger;impo…

【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 26 日论文合集)

文章目录 一、分割|语义相关(7篇)1.1 Learning Transferable Object-Centric Diffeomorphic Transformations for Data Augmentation in Medical Image Segmentation1.2 Optical Flow boosts Unsupervised Localization and Segmentation1.3 Spectrum-guided Multi-granularity…

【LeetCode热题100】打卡第45天:倒数第24~20题

文章目录 【LeetCode热题100】打卡第45天&#xff1a;倒数第24~20题⛅前言 最佳卖股票时机含冷冻期&#x1f512;题目&#x1f511;题解 戳气球&#x1f512;题目&#x1f511;题解 零钱兑换&#x1f512;题目&#x1f511;题解 打家劫舍III&#x1f512;题目&#x1f511;题解…

opencv-25 图像几何变换04- 透视 cv2.warpPerspective()

什么是透视&#xff1f; 透视是一种几何学概念&#xff0c;用于描述在三维空间中观察物体时&#xff0c;由于视角的不同而产生的变形效果。在现实世界中&#xff0c;当我们从不同的角度或位置观察物体时&#xff0c;它们会呈现出不同的形状和大小。这种现象被称为透视效果。 透…

FFmpeg-两个文件mix重采样以那个为主

ffmpeg -i 2ch-44.1k.wav -i 2ch-16k.wav -filter_complex " \ [0:a][1:a]amixinputs2[aout]" \ -map [aout] -f null -ffmpeg -i 2ch-44.1k.wav -i 2ch-16k.wav -filter_complex " \ [0:a][1:a]amixinputs2[aout]" \ -map [aout] -f null -对比发现&#…

TCP网络通信编程之字节流

目录 【TCP字节流编程】 // 网络编程中&#xff0c;一定是server端先运行 【案例1】 【思路分析】 【客户端代码】 【服务端代码】 【结果展示】 【案例2】 【题目描述】 【注意事项】 【服务端代码】 【客户端代码】 【代码结果】 【TCP字节流编程】 // 网络编程中&a…

python刑事案卷图片转pdf

分两步&#xff0c;第一步是转图片&#xff0c;第二步是合并。 # -*- coding: utf-8 -*- import glob,os from PIL import Imagedef convert_to_pdf(path):# 打开图片文件img Image.open(path)# 将图片转换为 PDF&#xff0c;并保存到同名文件pdf_path os.path.splitext(path…