JAVA SE -- 第十一天

news2024/9/30 5:34:48

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

异常-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.coloradmin.cn/o/807940.html

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

相关文章

ChatGPT与高等教育变革:价值、影响及未来发展

最近一段时间,ChatGPT吸引了社会各界的目光,它可以撰写会议通知、新闻稿、新年贺信,还可以作诗、写文章,甚至可以撰写学术论文。比尔盖茨、马斯克等知名人物纷纷为此发声,谷歌、百度等知名企业纷纷宣布要提供类似产品。…

Windows系统远程桌面访问统信Uos社区版Deepin系统的正确方法

文章目录 0、前言1、安装X11vnc2、安装xrdp3、在Windows中以远程桌面连接3.1、可以以xorg方式远程桌面连接3.2、以vnc方式远程桌面连接黑屏 0、前言 前段时间写了篇博文【UnRaid虚拟机安装Uos家庭版并由Windows远程桌面访问的成功流程】,成功实现远程桌面方式登录U…

用asp.net开发h5网页版视频播放网站,类似优酷,jellyfin,emby

之前用jellyfin开源软件搞了一个视频播放服务器,用来共享给家里人看电影和电视剧,jellyfin虽然各方面功能都很强大,但是界面和使用习惯都很不适合,于是就想着利用下班休息时间做一套自己喜欢的视频网站出来. 本来是打算直接用jellyfin的源码进行修改,源码是用C# netcore 写的服…

安全学习DAY10_HTTP数据包

文章目录 HTTP数据包![请添加图片描述](https://img-blog.csdnimg.cn/32eb72ceb2d6453b94487edb1a940a43.png)Request请求数据包结构Request请求方法(方式)请求头(Header)Response响应数据包结构Response响应数据包状态码状态码作…

SQL-每日一题【1050. 合作过至少三次的演员和导演】

题目 ActorDirector 表: 查询合作过至少三次的演员和导演的 id 对 (actor_id, director_id) 示例 1: 解题思路 1.题目要求我们查询出合作过至少三次的演员和导演的 id 对,我们可以 group by 两次来解决这个问题。 2.首先我们按照 actor_id 进…

Pycharm debug程序,跳转至指定循环条件/循环次数

在断点出右键,然后设置条件 示例 for i in range(1,100):a i 1b i 2print(a, b, i) 注意: 1、你应该debug断点在循环后的位置而不是循环上的位置,然后你就可以设置你的条件进入到指定的循环上了 2、设置条件,要使用等于符号…

【C++ 进阶】第 1 章:[C 语言基础] C 语言概述与数据类型

目录 一、C 语言的概述 (1)计算机结构组成 (2)计算机系统组成 (3)ASCII 码 (4)计算机中的数制及其转换 (5)程序与指令 (6)语…

Diffusion扩散模型学习3——Stable Diffusion结构解析-以图像生成图像(图生图,img2img)为例

Diffusion扩散模型学习3——Stable Diffusion结构解析-以图像生成图像(图生图,img2img)为例 学习前言源码下载地址网络构建一、什么是Stable Diffusion(SD)二、Stable Diffusion的组成三、img2img生成流程1、输入图片编…

Mysql操作多表查询

多表查询是指在关系型数据库中,通过同时查询多个数据表来检索相关数据的操作。这种查询方式通常用于需要在多个数据表中搜索和比较数据的情况,以获取更完整和准确的结果。 在多表查询中,使用联接(join)操作将多个表连…

【Spring框架】SpringBoot创建和使用

目录 什么是SpringBoot?SpringBoot优点创建SpringBootSpringBoot使用 什么是SpringBoot? Spring 的诞⽣是为了简化 Java 程序的开发的,⽽ Spring Boot 的诞⽣是为了简化 Spring 程序开发的。 SpringBoot优点 1.起步依赖(创建的时候就可以方…

day47-SSM分页

SSM分页(增删改查登录注册) applicationContext.xml中加入mybatis-config.xml路径 mybatis-config.xml Mapper接口 Service接口及其实现类 Mapper.xml page.jsp personDetail.jsp addPerson.jsp updatePerson.jsp login.jsp regist…

DMA传输原理与实现详解(超详细)

DMA(Direct Memory Access,直接内存访问)是一种计算机数据传输方式,允许外围设备直接访问系统内存,而无需CPU的干预。 文章目录 Part 1: DMA的工作原理配置阶段:数据传输阶段: Part 2: DMA数据…

【弹力设计篇】聊聊灾备设计、异地多活设计

单机&集群架构 对于一个高可用系统来说,为了提升系统的稳定性,需要以下常用技术服务拆分、服务冗余、限流降级、高可用架构设计、高可用运维,而本篇主要详细介绍下,高可用架构设计。容灾备份以及同城多活,异地多活…

Python开发之手动实现一维线性插值

Python开发之手动实现一维线性插值 1.线性插值法介绍2.手动实现线性插值3.案例一手动实现线性插值4.使用pandas的插值方法实现要求(推荐) 前言:主要介绍手动实现一维线性插值以及pandas里面的interpolate方法实现线性插值。 1.线性插值法介绍 线性插值法是一种简单…

MySQL中锁的简介——行级锁之 间隙锁 和 临键锁

1.间隙锁演示 2.临键锁演示 间隙锁锁住的是间隙,不包含对应的数据记录,而临键锁既会包含当前这条数据记录,也会锁定该数据记录之前的间隙。间隙锁的目的是防止其他事务插入间隙造成幻读现象。间隙锁是可以共存的,一个事务采用的间…

maven引入本地jar包的简单方式【IDEA】【SpringBoot】

前言 想必点进来看这篇文章的各位,都是已经习惯了Maven从中央仓库或者阿里仓库直接拉取jar包进行使用。我也是🤡🤡。 前两天遇到一个工作场景,对接三方平台,结果对方就是提供的一个jar包下载链接,可给我整…

sqlSugar应用表值函数

一、新建表值函数 TableIntSplit 二、新建类 var employees _sqlSugarClient.Queryable<Employees>().InnerJoin(_sqlSugarClient.SqlQueryable<TableID>("select * from dbo.TableIntSplit(ids,split)").AddParameters(new { ids "1,2", s…

无涯教程-jQuery - Slide方法函数

幻灯片效果可以与show/hide/toggle一起使用。这会将元素滑出视口。 Slide - 语法 selector.hide|show|toggle( "slide", {arguments}, speed ); 这是所有参数的描述- direction - 效果的方向。可以是"左(left)"&#xff0c;"右(right)"&…

C语言第十一课--------操作符的使用与分类-------基本操作

作者前言 作者介绍&#xff1a; 作者id&#xff1a;老秦包你会&#xff0c; 简单介绍&#xff1a; 喜欢学习C语言和python等编程语言&#xff0c;是一位爱分享的博主&#xff0c;有兴趣的小可爱可以来互讨 个人主页::小小页面 gitee页面:秦大大 一个爱分享的小博主 欢迎小可爱们…

解决 tensorflow 出现的 ImportError: Could not find the DLL(s) ‘msvcp140_1.dll‘. 问题

在安装完tensorflow库后出现 问题详述&#xff1a; ImportError: Could not find the DLL(s) msvcp140_1.dll. TensorFlow requires that these DLLs be installed in a directory that is named in your %PATH% environment variable. You may install these DLLs by downlo…