第十二章 异常-Exception

一、异常的概念(P444)

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

执行过程中所发生的异常事件可分为两大类
(1)Error(错误):Java 虚拟机无法解决的严重问题。如:JVM 系统内部错误、资源耗尽等严重情况。比如:StackOverflowError【栈溢出】和 OOM【out of memory】,Error 是严重错误,程序会崩溃。
(2)Exception:其它因编程错误或偶然的外在因素导致的一般性问题,可以使用针对性的代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等等,Exception 分为两大类:
1️⃣运行时异常:程序运行时,发生的异常
2️⃣编译时异常:编程时,编译器检查出的异常。

public class Demo {public static void main(String[] args) {int num1 = 10;int num2 = 0;int res = num1 / num2;System.out.println("程序继续运行...");}
}

在这里插入图片描述

解决方案 - 异常捕获

public class Demo {public static void main(String[] args) {int num1 = 10;int num2 = 0;try {int res = num1 / num2;} catch (Exception e) {e.printStackTrace();System.out.println("==========");System.out.println(e.getMessage());}System.out.println("程序继续运行...");}
}

在这里插入图片描述

二、异常体系图

在这里插入图片描述

在这里插入图片描述
(1)运行时异常,编译器检查不出来。一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RuntimeException 类及它的子类都是运行时异常。
(2)对于运行时异常,可以不作处理,因为这类异常很普遍,若全处理可能会对程多的可读性和运行效率产生影响。
(3)编译时异常,是编译器要求必须处置的异常。

三、常见异常

1. 常见的运行时异常

(1)NullPointerException 空指针异常
(2)ArithmeticException 数学运算异常
(3)ArrayIndexOutOfBoundsException 数组下标越界异常
(4)ClassCastException 类型转换异常
(5)NumberFormatException 数字格式不正确异常

2. 常见的编译异常

(1)SQLException//操作数据库时,查询表可能发生异常
(2)IOException//操作文件时,发生的异常
(3)FileNotFoundException//当操作一个不存在的文件时,发生异常
(4)EOFException//操作文件,到文件未尾,发生异常
(5)IllegalArguementException//参数异常

四、异常处理

异常处理的方式:
(1)try-catch-finally:程序员在代码中捕获发生的异常,自行处理。
(2)throws:将发生的异常抛出,给调用者(方法)来处理,最顶级的处理者就是 JVM。

1. try-catch-finally

(1)如果异常发生了,则异常发生后面的代码不会执行,直接进入到 catch块。
(2)如果异常没有发生,则顺序执行 try 的代码块,不会进入到 catch。
(3)如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)则使用 finally。
(4)可以有多个 catch 语句,捕获不同的异常(进行不同的业务处理),要求父类异常在后,子类异常在前,比如(Exception在后,NullPointerException在前),如果发生异常,只会匹配一个 catch 。
(5)可以进行 try-finally 配合使用,这种用法相当于没有捕获异常,因此程序会直接前掉/退出。应用场景,就是执行一段代码,不管是否发生异常,都必须执行某个业务逻辑。

2. throws

(1)如果一个方法(中的语句执行时)可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
(2)在方法声明中用 throws 语句可以声明抛出异常的列表,throws 后面的异常类型可以是方法中产生的异常类型,也可以是它的父类。

注意事项和使用细节:
(1)对于编译异常,程序中必须处理,比如 try-catch 或者 throws。
(2)对于运行时异常,程序中如果没有处理,默认就是throws 的方式处理。
(3)子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型。

五、自定义异常

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

自定义异常的步骤
(1)定义类:自定义异常类名,继承 Exception 或 RuntimeException。
(2)如果继承 Exception,属于编译异常。
(3)如果继承 RuntimeException,属于运行异常(一般来说继承 RuntimeException)。

public class Test {private static Object RuntimeException;public static void main(String[] args) {int a = 10;if (a > 0) {throw new CustomException("自定义异常");}}
}// 自定义一个异常
class CustomException extends RuntimeException {public CustomException(String message) {super(message);}
}

六、throw 和 throws 的区别

在这里插入图片描述

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

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

相关文章

OpenCV-Python(19):Canny边缘检测

目录 学习目标 Canny 边缘检测原理 1.噪声抑制(噪声去除) 2.梯度计算 3.非极大值抑制 4.双阈值检测(滞后阈值) 5.边缘连接 Canny 边缘检测步骤 Canny 边缘检测的OpenCV实现 不同阈值的边缘检测效果 学习目标 了解Canny边缘检测的概念学习掌握函数cv2.Canny()的用法 …

【星海出品】Keepalived 使用基础案例 (二)

keepalived 使用 [rootmaster ~]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalivedglobal_defs { //全局配置notification_email { //定义报警收件人邮件地址acassenfirewall.locfailoverfirewall.locsysadminfirewall.loc}notification_…

laravel 对接支付,本地穿透问题

本地穿透有好多工具,参考链接:https://zhuanlan.zhihu.com/p/339923535 我这边是用的 NATAPP 官网:https://natapp.cn/ 客户端下载:https://natapp.cn/# NATAPP1分钟快速新手图文教程:https://natapp.cn/article/n…

内部FLASH模拟EPPROM

本例程基于STM32F103ZET6 FLASH大小为512K。 介绍FLASH 不同型号的 STM32,其 FLASH 容量也有所不同,最小的只有 16K 字节,最大的则达到了 1024K 字节。我们的精英 STM32 开发板选择的是 STM32F103ZET6 的 FLASH 容量为 512K 字节&#xff0…

【INTEL(ALTERA)】 quartus 在 F-Tile 以太网多速率英特尔® FPGA IP同时启用了自动协商和链路训练时生成严重警告

说明 由于英特尔 Quartus Prime 专业版软件版本 23.4 存在问题,包含启用 ANLT 的 F-Tile 以太网多速率英特尔 FPGA IP的动态重新配置项目将生成严重警告。 这些警告的形式如下所示: 严重警告 (22976):IP 或 IP 缺少动…

记录 | ubuntu安装jsoncpp

两种方式,一种是源码编译,另一种是 apt 安装 源码编译 # 下载源码包 git clone https://github.com/open-source-parsers/jsoncpp.gitcd jsoncppmkdir build cd build# 编译安装 cmake .. make -j32 make install apt 安装 sudo apt update sudo apt…

【宜搭】低代码开发师中级证书选择题库

题目正确选项内容正确选项1关联表单组件在开启多选模式的情况下,也可以进行数据填充。错误2普通表单中组件的唯一标识可以通过双击唯一标识进行修改。错误3以下哪个函数可以正确获取成员的工号?USERFIELD( 成员 ,"businessWorkNo")D4 以下哪个不属于报表页面中的布…

vue中的data与_data的关系是什么

vue中的data与_data的关系是什么 -代理 在 Vue 实例中,data 属性是用户定义的用于存储数据的对象,而 _data 是 Vue 内部用于存储数据的对象。它们之间的关系是 Vue 实例的 data 属性实际上是对 _data 的代理。 当你在创建 Vue 实例时,Vue 会…

drf请求与响应

一 请求与响应 1.1 Request REST framework 传入视图的request对象不再是Django默认的HttpRequest对象,而是REST framework提供的扩展了HttpRequest类的Request类的对象。 REST framework 提供了Parser解析器,在接收到请求后会自动根据Content-Type指…

POP3协议详解

基本介绍 POP3是一种用于从邮件服务器获取电子邮件的协议。它允许邮件客户端连接到邮件服务器,检索服务器上存储的邮件,并将邮件下载到客户端设备上。POP3的工作原理如下: 连接和身份验证: 邮件客户端通过TCP/IP连接到邮件服务器…

MATLAB Mobile - 使用预训练网络对手机拍摄的图像进行分类

系列文章目录 前言 此示例说明如何使用深度学习对移动设备摄像头采集的图像进行分类。 在您的移动设备上安装和设置 MATLAB Mobile™。然后,从 MATLAB Mobile 的“设置”登录 MathWorks Cloud。 在您的设备上启动 MATLAB Mobile。 一、在您的设备上安装 MATLAB M…

qt项目-《图像标注软件》源码阅读笔记-Command类绘图及其子类

目录 1. Command 概览 2. Command2D 1. Command 概览 功能:命令栈基类,用来实现撤销和重做功能。 其子类Command2D和Command3D都是实现父类方法,除了构造函数没有自己的独有方法。 字段: redoCommands:存储re…

【Python百宝箱】模型透明化:机器学习解释性方法深度解读

深入解析机器学习模型:解释性方法全景 前言 在机器学习领域,复杂的模型往往被视为“黑盒”,使得模型的预测结果难以理解。然而,随着对模型可解释性的需求不断增长,解释性方法应运而生,为我们提供了一扇了…

SpringBoot3-数据访问

文章目录 整合SSM场景1. 创建SSM整合项目配置数据源3. 配置MyBatis4. CRUD编写5. 自动配置原理6. 快速定位生效的配置7. 扩展:整合其他数据源1. Druid 数据源 附录:示例数据库 整合SSM场景 SpringBoot 整合 Spring、SpringMVC、MyBatis 进行数据访问场景…

Django 安装

Django 安装 在安装 Django 前,系统需要已经安装了 Python 的开发环境。 如果你还没有安装 Python,请先从 Python 官网 https://www.python.org/ 下载并安装最新版本的 Python。 Django 安装也很简单使包管理工具 pip在终端中就可以了: p…

变量覆盖漏洞 [BJDCTF2020]Mark loves cat 1

打开题目 我们拿dirsearch扫描一下看看 扫描得到 看见有git字眼&#xff0c;那我们就访问 用githack去扒一下源代码看看 可以看到确实有flag.php结合index.php存在 但是当我去翻源代码的时候却没有翻到 去网上找到了这道题目的源代码 <?phpinclude flag.php;$yds &qu…

JWT是什么?它有什么用?

1. 什么是 JWT&#xff1f; JWT是 JSON Web Token 的缩写&#xff0c;通过数字签名的方式&#xff0c;以 JSON 对象为载体&#xff0c;在不同的服务器终端之间安全传输的信息。 2. JWT 有什么用&#xff1f; JWT 最常见的场景就是授权认证&#xff0c;一旦用户登录&#xff…

系列八、VMWare无法启动CentOS7问题排查 解决

一、VMWare无法启动CentOS7 1.1、问题描述 今天在测试代码的时候&#xff0c;需要用到Linux&#xff0c;然后就打开VMWare进行启动&#xff0c;但是启动的时候发现无法启动起来&#xff0c;报了一个如下的错误&#xff1a; 出现了问题那就要解决问题&#xff0c;然后想起来前几…

Koordinator 支持 K8s 与 YARN 混部,小红书在离线混部实践分享

作者&#xff1a;索增增&#xff08;小红书&#xff09;、宋泽辉&#xff08;小红书&#xff09;、张佐玮&#xff08;阿里云&#xff09; 背景介绍 Koordinator 是一个开源项目&#xff0c;基于阿里巴巴在容器调度领域多年累积的经验孵化诞生&#xff0c;目前已经支持了 K8s…

【数据结构】线段树算法总结(单点修改)

知识概览 用作单点修改的线段树有4个操作&#xff1a; pushup&#xff1a;由子节点的信息计算父节点的信息build&#xff1a;初始化一棵树modify&#xff1a;修改一个区间query&#xff1a;查询一个区间 线段树用一维数组来存储&#xff1a; 编号是x的节点&#xff0c;它的父节…