Java中的异常总结详解(异常类型、声明异常、抛出异常、捕获异常)

发布时间:2026/10/26 1:16:09

Java中的异常总结详解(异常类型、声明异常、抛出异常、捕获异常) 前言异常处理使得程序可以处理非预期的情景并且继续正常的处理。程序运行进程里, 一旦JVM检测出一项难以执行的操作, 便会现运行时错误error。举例来说, 要是运用一个超界的下标去访问数组, 程序就会产生一回运行时错误。倘若程序需求输入一个值, 就会获取一个on的运行时错误。于Java里, 运行时错误会当作异常给抛出, 异常乃是一种对象, 指代着阻挠程序正常执行的错误抑或情况, 要是异常未被处理, 那程序将会非正常终止, 该如何去处理这个异常, 从而让程序能够继续运行或者优雅终止呢 , 本篇文章会去介绍此主题。一、异常概述异常是什么呢, 它是程序在运行期间出现的一些错误, 我们借助面向对象的思想, 把这些错误用类去进行描述, 一旦产生一个错误, 也就是创建了某一个错误对应的对象, 这个对象就是我们所称作的异常对象。在这之前也见过很多的异常错误例如1ption2空指针异常 对null调用其成员。3数学运算异常 非法的数学运算。4类型转换异常 将类进行错误的强制转换。5n数字格式化异常 将数字字符串进行解析。6on输入不匹配异常 在输入时输入非法数据。7时间解析异常 非法的时间格式。8栈内存溢出异常 函数递归。9堆内存异常 数组空间开辟过大 程序中对象太多。为了演示异常处理在这里举了个例子进行讲解public static void main(String[] args) { int[] arr {1,2,3,4,5}; int num getNumber(arr,10); System.out.println(num); } private static int getNumber(int[] arr, int i) { return arr[i]; //如果arr为null NullPointerException //如果i越界 ArrayIndexOutOfBoundsException }像上面所展示的代码那样, 针对一个存在返回值的函数来讲, 倘若操作计算是正确这种情况, 必然会有一个正常情形下的返回值, 如果操作计算属于错误的状况, 从函数这个角度去看, 会不会有正常的返回值呢? 不会 这样的结论, 不会有的这种情况是存在的?事实上, 绝大多数的过失, 实际上都是被JVM发觉随后进行抛出的, 当然啦, 我们也能够人为去加以判定的。private static int getNumber(int[] arr, int i) { //return arr[i];//是由JVM来进行判断的 //模拟JVM的操作 用手动的判断模拟JVM自动的发现 if (arr null) { //产生一个空指针异常的问题对象 //用throw抛出关键 将产生的问题告知调用者 throw new NullPointerException(); //一旦上述抛出一个问题 此函数立马中断 //类似于return 正常结束(弹栈) //throw非正常结束(中断 强制弹栈 并抛出问题给调用者) } if (i 0 || i arr.length) { //产生一个数组角标越界异常的问题对象 throw new ArrayIndexOutOfBoundsException(); //throw new StackOverflowError(); //PS 一旦出现错误 抛出问题即可 但是最好抛出最相关最精确的问题 } return arr[i]; }函数一旦出现问题, 会直接把问题抛给主函数, 然而主函数并未处理该问题, 主函数随后将问题抛给调用者 JVM, JVM 可不帮你解决, 结果便是程序中断了JVM, 它调用main, main又进行调用, 之后出现异常, 异常被抛出给main, main却没有处理, 于是异常被抛出并传递给JVM, 最后JVM直接中断。补充说明一点, 当然了, 要是函数的内部出现了问题, 那么也能够把这个问题在内部进行处理, 在处理之后, 就不需要朝着上层去抛出了。二、异常类型由于错误的因素涵盖诸多, 刻画错误的类别同样不少, 如此一来便形成了一个庞大的家族或者体系, 其中填充的全是异常错误类, 我们将其称作异常体系。就异常体系来讲, 众人皆为错误, 然而所形成的缘由不完全相同, 持续朝向上方提取共通性。最终提炼出此接口能够被抛出来的, 但凡属于异常对象, 不管成因如何, 均能够被抛出。Java语言里, 类身为所有错误以及异常的超类, 唯有在对象属于这个类抑或是它的子类当中的某一个的实例之际, 才能够借助Java虚拟机或者Java throw语句将其抛出。异常属于对象范畴之内, 对象全部是仰仗类所勾勒而成, 在此情境里涉及的根类是java.lang., 关系图展示如下:注意, 类名 Error, 以及, 有时候, 容易引发混淆。这三种类别, 均为异常, 此处所讨论的错误, 皆于运行这个时段出现。类作为所有异常类的根源所在。所有Java异常类, 都存在直接或间接继承自其的情况。能够借助继承它或者其特定子类的方式, 来创建属于自己的异常类。三种主要类型包括, 这些异常类可被划分成, 系统错误, 编译时异常, 运行时异常。1.系统错误Error内存耗尽 无法加载某个Class 栈溢出。2.编译时异常则是编译时异常它可以被捕获并处理。某些异常是应用程序逻辑处理的一部分应该捕获并处理。例如另外存在一些异常情况系程序逻辑编写出现差错所导致的, 对此应当对程序自身予以修复, 举例来说:3.运行时异常、Error就连同它们的子类一块儿被称之为免检异 )。余下的各个异常编译时异常统统被叫做必检异常, 其意思是说编译器会硬性要求程序员检査并且借助try - catch块去处理它们, 又或者是在方法头予以声明。很多时候, 免检异常往往都能体现出程序设计里那种没办法恢复的逻辑错误, 就比如说, 要是借助一个引用变量去访问一个对象, 可在这之前却没给这个对象赋值, 那就会抛出异常, 要是去访问一个数组超出界限的元素, 也会抛出ption异常, 这些那可都是程序当中必须得去纠正的逻辑错误, 免检异常说不定会在程序的任何一处冒出来, 为了防止老是去用try - catch块, Java语言并没有强制规定编写代码的时候要去捕获或者声明免检异常。Java规定三、处理编译时异常的更多知识 1. 声明异常在Java里, 当下正在执行的语句肯定是归属于某一个方法的。Java解释器会去调用main方法从而起始执行一项程序。每一个方法都必然要声明其有可能抛出的必检异常的类型。这就被称作声明异常。仅仅是针对编译时异常进行声明, 以此告知方法的调用者有异常。如果要于方法里头表明一个异常, 那就得在方法的开头部分运用关键字, 情况如下所示:public void myMethodO throws IOException当关键字表明, 方法可齙会抛出异常时。若方法本身可能会抛出多个相异的异常, 那么就能够在该关键字之后紧接着补上一个以逗号作为间隔来区分的异常列表:public void myMethodO throws Exceptionl, Exception2,… ExceptionN注意, 要是方法于父类之中未声明异常, 那么在子类里就不可以通过继承它来声明异常。2. 抛出异常程序检测到错误时, 能够创建一个符合合适异常类型的实例, 接着将其抛出, 此行为称作抛出一个异常an。这里有个例子, 倘若程序察觉到传递给方法的参数和方法的合约不相符比如, 方法里的参数应当是非负的, 然而传入的却是一个负参数, 那么这个程序便能够创建tion的一个实例, 随后将其抛出, 情况如下所示:IllegalArgumentException ex new II1egalArgumentException(Wrong Argument); throw ex;或者大多数使用下面的语句throw new IllegalArgumentException(Wrong Argument);注意, tion属于Java API里的一个异常类, 一般而言, 其中的每个异常类起码具备两个构造方法, 一个没有参数的构造方法, 以及一个带有能够描述这个异常的参数的构造方法, 该参数称作异常消息, 它能够通过()获取。提示, 声明异常的关楗字是, 抛出异常的关键字是throw。3. 捕获异常
延伸阅读

更多相关文章

2026/10/24 17:56:35

小米AI编程助手发布并开源:界面全汉化,自进化终端AI编程助手

小爱同学发布了自主研发的AI编程助手, 它的界面是全中文的, 并且能够自我进化。小米通过二次开发, 正式发布MiMo Code V0.1.0并开源, 该版本采用宽松的MIT协议, 任何个人、企业都可以下载部署, 自由使用、修改和二次分发, 降低了开发工具链的集成门槛。对于模型适配这一方面, M…

2026/10/24 23:06:59

基于SpringBoot2+vue2的靓车汽车销售网站

1. 资源https://blog.xiaobias.com/article/582. 项目简介 靓车汽车销售网站是B2C(Business-to-Customer,商对客)电子商务平台。系统基于Spring Boot框架构建,分为后台管理子系统和前端用户子系统。 后台管理子系统:为…

2026/10/25 18:17:55

基于SpringBoot2+vue2的中小企业设备管理系统

1. 资源https://blog.xiaobias.com/article/572. 项目简介 中小企业设备管理系统,基于 Spring Boot MyBatis-Plus Vue.js 开发。系统旨在帮助中小企业对设备及配件进行全生命周期管理,包括设备信息登记、购买、点检、润滑、改造、报修、安装、售后保养…

2026/10/26 1:15:52

Unity Android 包反编译:拆开看看里面装了啥

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 1:15:52

AD DS 扫盲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/26 1:15:52

嵌入式:Flash的分类以及Jlink/J-flash的编程支持

相关阅读 嵌入式https://blog.csdn.net/weixin_45791458/category_12768532.html?spm1001.2014.3001.5482 常见的Flash大致可以分为以下大类: Serial Nor FlashSerial Nand FlashParallel Nor FlashParallel Nand FlashSerial EEPROM Serial Nor Flash 介绍 Se…

2026/10/26 0:20:20

全国计算机二级C语言真题PDF高效刷题指南

简介:这份PDF是全国计算机二级C语言考试的试题与答案解析,专为备考二级C语言的考生准备。内容涵盖C语言特点与设计理念、程序基本组成单位、main函数执行流程、函数嵌套调用规则、标识符命名规范、整型实型字符型数据类型、八进制十六进制数合法形式、运…

2026/10/25 0:02:23

requests+BeautifulSoup:爬虫抓取h1标题的入门实战指南

简介:一份以实战为导向的Python爬虫入门资源,面向具备基本编程基础、希望快速掌握网络数据抓取的初学者,可解决从零编写简单爬虫的常见困惑。实例以requests库发送HTTP请求、BeautifulSoup解析HTML文档,完整演示从网页中提取 标题…

2026/10/26 0:20:17

递推最小二乘参数辨识MATLAB编程:二阶系统与渐消记忆实现

简介:这是一篇面向控制系统、信号处理与机器学习等领域学习者的最小二乘参数辨识程序说明文档。资源共包含一个docx格式文档,压缩包大小七十八KB,内容围绕递推最小二乘算法和渐消记忆最小二乘算法展开:先构造一个极点位于单位圆内…

2026/10/26 0:00:48

Nested Learning:解决AI灾难性遗忘的分层记忆架构

1. 为什么AI需要"记忆"能力?在传统深度学习模型中,我们常遇到一个根本性问题:模型在处理新任务时,往往会完全遗忘之前学到的知识。这种现象被业界称为"灾难性遗忘"(Catastrophic Forgetting)。想象一下&#…

2026/10/26 0:00:48

企业级大模型应用:OCR预处理、Dify编排与DeepSeek落地实战

1. 这不是“用大模型”,而是重构工作流的起点“大模型的应用和工具”——这八个字现在被贴在无数技术分享、招聘JD、内部立项书的标题栏里,但绝大多数人点进去后看到的,是零散的API调用示例、几个开源UI截图、或者一句“接入LLM就能降本增效”…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑