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. 捕获异常

相关新闻

UVa 1523 Helicopter

UVa 1523 Helicopter

题目描述 给定 888 个整数,表示 888 位乘客的重量。直升机有 888 个座位,分布在螺旋桨(中心)的周围,每个座位的横向坐标和纵向坐标分别为 −1-1−1、000 或 111,且不包含 (0,0)(0,0)(0,0)。规定左侧乘客产生…

2026/11/13 17:01:17 阅读更多 →
CSDN原力榜185:AI原生系统8层全拆

CSDN原力榜185:AI原生系统8层全拆

多数人看到"AI 写的文章冲上 CSDN 原力榜 185 名",第一反应是:是不是用了什么神级提示词? 不是。 我用的模型很普通,提示词也不神秘。真正让我从月排名 693 一路爬到 185 的,是把"写文章"这件事当…

2026/11/13 17:01:17 阅读更多 →
Claude写前端组件提示词从普通版到进阶版怎么写

Claude写前端组件提示词从普通版到进阶版怎么写

配备AI智能聊天功能, 拥有问答助手特性, 具备AI智能搜索能力, 借助多模态理解力助力, 帮你轻松跨越以0为起始点抵达1的创作门槛。你要去促使产生那契合真实项目规范的前端组件代码, 并非单单只是那种能够运行得通的玩具示例。常理下的提示词通常会致使输出出现缺少props定义的情…

2026/10/24 9:02:20 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/13 5:13:25 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/13 5:13:25 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/13 5:13:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/12 18:22:26 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/12 18:22:25 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/13 5:13:25 阅读更多 →

日新闻

周新闻

月新闻