Java中异常的处理及捕获

news/2024/11/13 3:39:28/

Java中异常的处理及捕获

一、异常的概述

(1)Java中异常的作用:增强程序的健壮性
(2)在Java中所有的Error(错误)和异常(Exception)都继承了同一个父类Throwable
在这里插入图片描述

二、异常产生的原因(Java异常的种类)

在Java中异常产生主要有三种原因:
(1)程序内部错误所产生的异常。比如数组越界(ArrayIndexOutOfBoundsException)、空指针异常(NullPointerException)等,这种异常叫做非受检异常,这类异常不需要在代码中声明抛出,但需要在类中处理这些异常。
运行时异常(RuntimeException)下的各类异常都属于非受检异常
(2)通过throw(抛出异常)语句手动生成的异常,这种异常叫做受检异常。受检异常这种异常在编译时就可以被检测出来,必须在代码中进行处理或者声明抛出,否则编译不通过。例如:IOException,FileNotFoundException,ClassNotFoundException,SQLException等。
(3)Error:这类异常通常是由Java虚拟机(jvm)或硬件引起的。比如:OutOfMemoryError,StackOverFlowError等。

三、异常的处理

3.1异常的抛出(throw)

1、throw是将异常抛给调用者,由其调用者来对异常信息进行处理。在编写程序时,如果程序中出现错误,这就需要将异常信息通知给调用者,这里就可以借助关键字throw,抛出一个指定的异常对象,将错误信息告知给调用者。
2、throw必须写在方法体内,且一旦出现异常后面的代码就不会执行。
在这里插入图片描述
在这里插入图片描述

3、如果抛出的是编译时异常(受检异常),咱就必须得处理掉这个异常,否则无法通过编译。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

如果抛出的是运行时异常(非受检异常),则可以不用处理,直接交给jvm来处理。(其实最好要是能处理的话还是处理一下子!!!!)
在这里插入图片描述
在这里插入图片描述

3.2异常的捕获

3.2.1 throws捕获异常

throws处在方法声明参数列表之后,当方法抛出编译时异常,而你又不想处理该异常,此时就可借助throws将异常抛给方法的调用者来处理。
1、格式:
修饰符 返回值类型 方法名(参数列表) throws 异常类型 {
}
在这里插入图片描述

2、如果说方法内抛出多个异常,throws之后就必须跟多个异常类型,用逗号进行分隔
在这里插入图片描述

3、如果抛出多个异常有父子关系,直接声明父类
在这里插入图片描述

4、调用声明抛出异常的方法时,调用者必须对该异常进行处理,或者继续使用throws抛出。
在这里插入图片描述

3.2.2、try-catch捕获异常并处理

1、当程序抛出异常的时候,我们可以通过try-catch对异常进行捕获处理。
在这里插入图片描述
在这里插入图片描述

2、需要明确如果程序抛出的异常不做处理,那就会交给jvm来处理,jvm处理就会把程序立即终止。这样我们就明白了,使用try-catch进行异常捕获时必须捕获对应的异常,如果捕获的不是对应的异常,也会让jvm进行处理。
在这里插入图片描述
在这里插入图片描述

4、如果try抛出多个异常就必须用多个catch进行捕获,这里注意,用多个catch进行捕获不是同时进行捕获,因为不能同时抛出不同的异常。
在这里插入图片描述

也可简写成如下:
在这里插入图片描述
在这里插入图片描述

5、如果异常之间有父子关系,那就必须子类异常在前,父类异常在后catch,不然会报错。
在这里插入图片描述

3.2.3、finally

1、finally不管程序正是否抛出异常,finally都会被执行。
2、finally用于进行资源回收或是一些收尾的操作,无论程序正常进行,还是退出都需要回收资源。
情况一:引发异常时,finally会被执行。
在这里插入图片描述
在这里插入图片描述

情况二:程序段正常结束后,finally下的语句也会被执行
在这里插入图片描述
在这里插入图片描述

3、即使有return,finally也会被执行。
在这里插入图片描述
在这里插入图片描述

4、总结:
throw抛出异常,throws声明异常并捕获,try-catch捕获异常
finally语句一定会执行

3.3自定义异常类

虽然Java中有很多异常类,但是在开发中我们会遇到很多异常,不能完全表示,这就需要我们通过自定义的异常类进行解决。
上代码:
首先:自定义异常类MyException
在这里插入图片描述

抛出自定义异常类,并进行捕获处理
在这里插入图片描述
在这里插入图片描述

自定义异常类的总结:
自定义异常类默认会继承Exception或者RuntimeException
继承于Exception的异常默认是受检异常
继承于RuntimeException的异常默认是非受检异常

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

注意,处理继承Exception(受检的)自定义异常时,必须对抛出的异常进行捕获处理,否则无法编译通过。


http://www.ppmy.cn/news/93267.html

相关文章

[元带你学: eMMC完全解读 9] 设备怎么复位到预空闲(Pre-Idle)状态

依JEDEC eMMC 5.1及经验辛苦整理,付费内容,禁止转载。 所在专栏 《元带你学: eMMC完全解读》 前言 在引导操作模式下,host (e-MMC主机)可以在发出CMD1之前,通过保持CMD线低电平或发送带有+0xFFFFFFFA参数的CMD0,才Device(e-MMC设备)读取引导Boot数据。根据寄存器设置,可…

小航编程题库机器人等级考试理论一级(2022年12月) (含题库教师学生账号)

需要在线模拟训练的题库账号请点击 小航助学编程在线模拟试卷系统(含题库答题软件账号)_程序猿下山的博客-CSDN博客 单选题2.0分 删除编辑 答案:C 第1题下列哪个是机器人?( ) A、aB、bC、cD、d 答案解析: 单选题…

STM32 AT24CXX器件地址的理解(IIC通讯协议)

if (EE_TYPE > AT24C16) /* 24C16以上的型号, 分2个字节发送地址 */ { iic_send_byte(0XA0); /* 发送写命令, IIC规定最低位是0, 表示写入 */ iic_wait_ack(); /* 每次发送完一个字节,都要等待ACK */ iic_send_byte(addr >&…

印象笔记导出HTML再转markdown的方法

前言 我已经使用6年印象笔记了,越来越依赖它了,现在已经有6000多条笔记了,我就想着如果某一天印象笔记没了,那我这些心血就都没了,所以我想要把笔记全部转为markdown格式,然后自己存储起来。可以选择用百度…

Prometheus(普罗米修斯)

Prometheus : 入门 Prometheus简介Prometheus 的主要特点Prometheus架构:什么时候用它合适什么时候用它不合适Prometheus VS InfluxDB基本概念数据模型metric types(指标类型) Prometheus 安装部署二进制安装部署1、将安装包prometheus-2.6.1…

netty学习第一课

技术主题 Netty是一个基于Java NIO(非阻塞 I/O)框架的网络编程框架。它提供了一系列的高级网络编程API,使得开发者可以非常容易地实现高性能、高可靠性的网络应用。Netty具有非常好的可扩展性和灵活性,能够很好地支持多种协议和数…

(4)STM32的SPI协议及LED点亮

目录 【1】SPI协议 SPI协议 2.SPI时序 【2】LCD液晶显示屏 显示屏 【3】点亮LCD显示屏 颜色填充 ​编辑 图片显示及英文显示 汉字显示 【1】SPI协议 SPI协议 SPI接口是摩托罗拉Motorola 首先提出的全双工三线/四线同步串行外围接口,采用主从模式(Master…

网络分级设计模型的三层架构:接入层、汇聚层、核心层到底有什么说法?

你好,这里是网络技术联盟站。 在现代网络中,为了满足不同规模和需求的组织和企业的通信需求,网络架构通常会划分为多个层次,其中包括接入层、汇聚层和核心层。这些层次在网络组网中扮演着不同的角色和功能。 本文将详细介绍接入层…