【JavaSE】异常处理学习笔记
异常处理
-异常介绍
-
基本概念
Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常)
-
执行过程中所发生的异常事件可分为两类
- Error(错误):Java虚拟机无法解决的严重问题。如:JVM系统内部错误、资源耗尽等严重情况。比如:StackOverFlowError[栈溢出]和OOM(out of memory),Error是严重错误,程序会崩溃。
- Exception:其他因编程错误或偶然的外在因素导致的一般性问题。可以使用针对性代码进行处理。例如空指针访问,试图读取不存在的文件,网络连接中断等等,Exception分为两大类:运行时异常和编译时异常。
-异常体系一览
-
异常体系一览
编译异常只可能在Java源程序编译为字节码文件时发生;运行异常只可能在字节码文件在内存中加载运行类时发生。
-
类图
- Throwable类继承Object类,实现Serializable接口。
- Error类继承Throwable类,比较常见的子类错误有StackOverFlowError、OutOfMemoryError,其他还有很多错误子类。
- Exception类继承Throwable类,它的子类可以分成运行时异常和编译时异常,编译时异常子类包括FileNotFoundException、ClassNotFoundException等等,运行时异常RuntimeException继承Exception,也有很多子类,例如NullPointerException、ClassCastException等等。
-
异常体系图小结
- 异常分为两大类,运行时异常和编译时异常。
- 运行时异常,编译器不要求强制处置的异常。一般是指编程时的逻辑错误,是程序员应该避免其出现的异常。java.lang.RuntimeException类及其子类都是运行时异常。
- 对于运行时异常,可以不做处理,因为这些异常很普遍,若全处理可能会对程序的可读性和运行效率产生影响。只需处理立即处理的异常,比如FileNotFoundException。
- 编译时异常,是编译器要求必须处置的异常。
-五大常见运行时异常
- 常见运行时异常包括
- NullPointerException空指针异常:当程序试图在需要对象的地方使用null时,抛出该异常
- ArithmeticException数学运算异常:当出现异常的运算条件时,抛出此异常,例如一个整数除以零时
- ArrayIndexOutOfBoundsException数组下标越界异常:用非法索引访问数组时抛出的异常,如果索引为负数或大于等于数组大小,则该索引为非法索引
- ClassCastException类型转换异常:当试图将对象强制转换为不是实例的子类时,抛出该异常
- NumberFormatException数字格式不正确异常:当应用程序试图将字符串转换成一种数值类型,但该字符串不能转换为适当格式时,抛出该异常,使用异常我们可以确保输入满足条件的数字
- 常见编译异常
- SQLException:操作数据库时,查询表可能发生异常
- IOException:操作文件时,发生的异常
- FileNotFoundException:当操作一个不存在的文件时发生异常
- ClassNotFoundException:加载类而该类不存在时,发生异常
- EOFExeption:操作文件,到文件末尾,发生异常
- IllegalArgumentException:参数异常
-异常处理
-
基本介绍
异常处理就是当异常发生时,对异常处理的方式
-
异常处理的方式
- try-catch-finally:程序员在代码中捕获发生的异常,自行处理。try代码块中写可能有异常的代码;catch中捕获异常,当异常发生时,系统将异常封装成Exception对象传递给catch;finally中的代码,不管是否发生异常都会执行,比如文件和网络的关闭。
- throws:将发生的异常抛出,交给调用者方法来处理,最顶级的处理者就是JVM
-
try-catch方式处理异常注意事项
- 如果异常发生了,则异常发生后面的代码不会执行,直接进入到catch块
- 如果异常没有发生,则顺序执行try的代码块,不会进入到catch。
- 如果希望不管是否发生异常,都执行某段代码(比如关闭连接,释放资源等)
则使用如下代码-finally - 可以有多个catch语句,捕获不同的异常(进行不同的业务处理),要求父类异
常在后,子类异常在前,比如(Exception在后,NullPointerException在前),如果发生异常,只会匹配一个catch - 可以进行try-finally配合使用,这种用法相当于没有捕获异常,因此程序会直接崩掉。应用场景,就是执行一段代码,不管是否发生异常,都必须
-
try-catch-finally执行顺序小结
- 如果没有出现异常,则执行try块中所有语句,不执行catch块中语句,如果有finally,最后还需要执行finally里面的语句
- 如果出现异常,则try块中异常发生后,try块剩下的语句不再执行。将执
行catch块中的语句,如果有finally,最后还需要执行finally里面的语句!
-throws异常处理
- 基本介绍
- 如果一个方法中的语句执行时可能生成某种异常,但是并不能确定如何处理这种异常,则此方法应显示地声明抛出异常,表明该方法将不对这些异常进行处理,而由该方法的调用者负责处理。
- 在方法声明中用throws语句可以声明抛出异常的列表,throws后面的异
常类型可以是方法中产生的异常类型,也可以是它的父类。
- 注意事项和使用细节
- 对于编译异常,程序中必须处理,比如try-catch或者throws
- 对于运行时异常,程序中如果没有处理,默认就是throws的方式处理
- 子类重写父类的方法时,对抛出异常的规定:子类重写的方法,所抛出的异常类型要么和父类抛出的异常一致,要么为父类抛出的异常的类型的子类型
- 在throws过程中,如果有方法try-catch,就相当于处理异常,就可以不必
throws - throws若是编译异常,则必须处理,若是运行时异常则可以不处理
-自定义异常
-
基本概念
当程序中出现了某些“错误”,但该错误信息并没有在Throwable子类中描述处理,这个时候可以自己设计异常类,用于描述该错误信息。
-
自定义异常类的步骤
- 定义类:自定义异常类名(程序员自己写)继承ExceptionRuntimeExceptio
- 如果继承Exception,属于编译异常
- 如果继承RuntimeException,属于运行异常(一般来说,继承RuntimeException)
-throw和throws的区别
意义 | 位置 | 后跟 | |
---|---|---|---|
throws | 异常处理的一种方式 | 方法声明处 | 异常类型 |
throw | 手动生成异常对象的关键字 | 方法体中 | 异常对象 |
相关文章:
【JavaSE】异常处理学习笔记
异常处理 -异常介绍 基本概念 Java语言中,将程序执行中发生的不正常情况称为“异常”。(开发过程中的语法错误和逻辑错误不是异常) 执行过程中所发生的异常事件可分为两类 Error(错误):Java虚拟机无法解决…...

Scratch节日 | 六一儿童节
六一儿童节到啦!快来体验这款超简单又超好玩的 六一儿童节 小游戏吧!只需要一只鼠标,就能尽情释放你的创意,绘出属于你自己的缤纷世界! 🎮 玩法介绍 鼠标滑动:在屏幕上随意滑动鼠标,…...

深度解析:跨学科论文 +“概念迁移表” 模板写作全流程
跨学科论文速通!融合“概念迁移表”的写作导航模板 你的论文是否曾被导师皱眉评价为“四不像”?不同学科的术语在稿纸上打架,核心逻辑若隐若现? 别让心血沦为学术混搭的牺牲品。一张精心设计的 概念迁移表,能将两个看…...

深度剖析Node.js的原理及事件方式
早些年就接触过Node.js,当时对于这个连接前后端框架就感到很特别。尤其是以独特的异步阻塞特性,重塑了了服务器端编程的范式。后来陆陆续续做了不少项目,通过实践对它或多或少增强了不少理解。今天,我试着将从将从原理层剖析其运行…...

VScode-使用技巧-持续更新
一、Visual Studio Code - MACOS版本 复制当前行 shiftoption方向键⬇️ 同时复制多行 shiftoption 批量替换换行 在查找和替换面板中,你会看到一个 .∗ 图标(表示启用正则表达式)。确保这个选项被选中,因为我们需要使用正则…...

主流 AI IDE 之一的 Windsurf 使用入门
一、Windsurf 的常见入门界面 以上是本次展示Windsurf版本信息。 1.1 个人配置中心 1.2 AI 助手快捷设置 1.3 使用额度查看页面 1.4 智能助手 Windsurf 编辑器中 AI 助手名称 :Cascade 。打开 Cascade 窗口,开始聊天就可以了。方框里有写和聊两种状态锁…...

大数据量下的数据修复与回写Spark on Hive 的大数据量主键冲突排查:COUNT(DISTINCT) 的陷阱
背景与问题概述 这一周(2025-05-26-2026-05-30)我在搞数据拟合修复优化的任务,有大量的数据需要进行数据处理及回写,大概一个表一天一分区有五六千万数据,大约一百多列的字段。 具体是这样的我先取档案&#x…...
Cursor 对话技巧 - 前端开发专版
引言 本文档旨在为前端开发团队提供与 Cursor AI 助手高效对话的技巧和方法,帮助团队成员更好地利用 AI 工具提升开发效率。文档中的技巧源自项目中的提示词相关文件,并经过整理和优化,专注于前端开发的各个场景。 目录 Cursor 对话技巧团队…...

历年南京理工大学计算机保研上机真题
2025南京理工大学计算机保研上机真题 2024南京理工大学计算机保研上机真题 2023南京理工大学计算机保研上机真题 在线测评链接:https://pgcode.cn/school 求阶乘 题目描述 给出一个数 n n n ( 1 ≤ n ≤ 13 ) (1 \leq n \leq 13) (1≤n≤13),求出它…...

Web前端常用面试题,九年程序人生 工作总结,Web开发必看
前端编程,JavaScript 从无知到觉醒 做 Web 开发,离不开 HTML,CSS,JavaScript,尽管日常工作以后台开发为主,但接触的多了,慢慢地理解深入,从只会使用 JS 写函数,发展到使用…...
HTML实战项目:高考加油和中考加油
设计思路 页面加载后会自动显示高考内容,点击顶部按钮可以切换到中考内容。倒计时会每秒更新,为考生提供实时的备考时间参考。 使用代表希望的蓝色和金色渐变作为主色调 顶部导航栏可切换高考/中考内容 添加动态倒计时功能 设计励志名言卡片和备考小贴…...

Rk3568驱动开发_设备树点亮LED_11
代码: #include <linux/module.h> #include <linux/kernel.h> #include <linux/init.h> #include <linux/fs.h> #include <linux/slab.h> #include <linux/uaccess.h> #include <linux/io.h> #include <linux/cdev.h…...

多功能文档处理工具推荐
软件介绍 今天为大家介绍一款功能强大的文档编辑工具坤Tools,这是一款在吾爱论坛广受好评的办公软件。 软件背景 坤Tools是由吾爱论坛用户分享的软件,在论坛软件榜单上长期位居前列,获得了用户的一致好评。 软件性质 这是一款完全离线、…...
如何科学测量系统的最高QPS?
要准确测量系统的最高QPS(Queries Per Second),既不能简单依赖固定请求数(如2万次),也不能盲目压到服务器崩溃。以下是专业的方法论和步骤: 1. 核心原则 目标:找到系统在稳定运行&a…...
ORM 框架的优缺点分析
ORM 框架的优缺点分析 一、ORM 框架概述 ORM(Object-Relational Mapping)是一种将关系型数据库与面向对象编程进行映射的技术框架。它通过将数据库表映射为编程语言中的类,将记录映射为对象,将字段映射为属性,实现了用面向对象的方式操作数据库。 核心价值:ORM 在数据库和…...

【目标检测】【ICCV 2021】条件式DETR实现快速训练收敛
Conditional DETR for Fast Training Convergence 条件式DETR实现快速训练收敛 代码链接 论文链接 摘要 最近提出的DETR方法将Transformer编码器-解码器架构应用于目标检测领域,并取得了显著性能。本文针对其训练收敛速度慢这一关键问题,提出了一种条…...

【工作笔记】 WSL开启报错
【工作笔记】 WSL开启报错 时间:2025年5月30日16:50:42 1.现象 Installing, this may take a few minutes... WslRegisterDistribution failed with error: 0x80370114 Error: 0x80370114 ??????????????????Press any key to continue......

VMware使用时出现的问题,此文章会不断更新分享使用过程中会出现的问题
VMware使用时出现的问题,此文章会不断更新分享使用过程中会出现的问题 一、VMware安装后没有虚拟网卡,VMnet1,VMnet8显示黄色三角警告 此文章会不断更新,分享VMware使用过程中出现的问题 如果没找到你的问题可以私信我 一、VMware…...
UniApp微信小程序自定义导航栏实现
UniApp微信小程序自定义导航栏 在UniApp开发微信小程序时,页面左上角默认有一个返回按钮(在导航栏左侧),但有时我们需要自定义这个按钮的样式和功能,同时保持与导航栏中间的标题和右侧胶囊按钮(药丸屏&…...
【Ubuntu】Ubuntu网络管理
Ubuntu 网络管理 ubuntu/debian 中的网络管理 NetworkManager,使用nmcli查询与操作网络配置 /run/NetworkManager/no-stub-resolv.conf 对应命令行例子: nmcli device showsystemd-networkd,使用netplan的yaml文件来配置网络 /usr/lib/systemd/systemd-networkdsystemd-resol…...
GitHub 趋势日报 (2025年05月27日)
本日报由 TrendForge 系统生成 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日整体趋势 Top 10 排名项目名称项目描述今日获星总星数语言1Fosowl/agenticSeek完全本地的马努斯AI。没有API,没有200美元的每…...
VR视角下,浙西南革命的热血重生
VR 浙西南革命项目依托先进的 VR 技术,为浙西南革命历史的展示开辟了一条全新的道路 ,打破了时间与空间的限制,使革命历史变得触手可及。 (一)沉浸式体验革命场景 借助 VR 技术,在 VR 浙西南革命的展示…...

深入解析Kafka JVM堆内存:优化策略与监控实践
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「storms…...

【高级终端Termux】在安卓手机/平板上使用Termux 搭建 Debian 环境并运行 PC 级 Linux 应用教程(含安装WPS,VS Code)
Termux 搭建 Debian 环境并运行 PC 级 Linux 应用教程 一、前言 1. 背景 众所周知,最新搭载澎湃OS和鸿蒙OS的平板都内置了PC级WPS,办公效率直接拉满(板子终于从“泡面盖”升级为“生产力”了)。但问题来了:如果不是这…...
基于BERT-Prompt的领域句子向量训练方法
基于BERT-Prompt的领域句子向量训练方法 一、核心原理:基于BERT-Prompt的领域句子向量训练方法 论文提出一种结合提示学习(Prompt Learning)和BERT的领域句子向量训练方法,旨在解决装备保障领域文本的语义表示问题。核心原理如下: 以下通过具体例子解释传统词向量方法和…...

高频面试--redis
Reids 1. 常见的数据结构(string, list, hash, set, zset) 答法模板: Redis 提供五种核心数据结构: String:最基本的类型,支持整数、自增、自减、位操作。 List:双端链表,支持消息…...

CRMEB 单商户Java版 v2.3公测版发布,欢迎体验!
当商城管理后台一成不变时,你是否也有过换换风格的想法? 当商城流量激增时,你是否也希望随时观察服务器负载状况,确保系统稳定运行? CRMEB单商户Java版v2.3公测版发布,更新200管理后台页面、弹窗…...
(四) 本地YARN集群的部署
一、部署说明 Hadoop YARN分布式资源调度,会启动: ResourceManager进程作为管理节点NodeManager进程作为工作节点ProxyServer、JobHistoryServer这两个辅助节点 二、配置文件 在 $HADOOP_HOME/etc/hadoop 文件夹内,修改: 1.m…...

华为OD机试真题——求最多可以派出多少支队伍(2025A卷:100分)Java/python/JavaScript/C/C++/GO最佳实现
2025 A卷 100分 题型 本专栏内全部题目均提供Java、python、JavaScript、C、C++、GO六种语言的最佳实现方式; 并且每种语言均涵盖详细的问题分析、解题思路、代码实现、代码详解、3个测试用例以及综合分析; 本文收录于专栏:《2025华为OD真题目录+全流程解析+备考攻略+经验分…...

《软件工程》第 12 章 - 软件测试
软件测试是确保软件质量的关键环节,它通过执行程序来发现错误,验证软件是否满足需求。本章将依据目录,结合 Java 代码示例、可视化图表,深入讲解软件测试的概念、过程、方法及实践。 12.1 软件测试的概念 12.1.1 软件测试的任务 …...