百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

我们来捋一捋JAVA的异常(java异常的两种处理方式)

toyiye 2024-07-11 00:30 8 浏览 0 评论

享学特邀作者:老顾

头条号id:老顾聊技术


前言

小伙伴们对Java的异常应该是不陌生的,不过很多人只是简单的应用而已,而没有全面的,整体的去了解Java的异常体系。今天老顾就来跟大家一起学习JAVA的异常

3W原则

哪都有的3W原则,JAVA异常也可以总结3W:what、where、why

what对应异常类型:回答了什么被抛出where对应异常堆栈跟踪:回答了在哪抛出why对应异常信息:回答了为什么被抛出

异常体系

上图我们看出Throwable是异常的顶级类,Error和Exception是他的子类。Exception又分RuntimeException和非RuntimeException子类

Error与Exception区别

我们看一下他们的概念定义:Error:程序无法处理的系统错误,编译器不做检查。

Error表示系统致命的错误,程序没法处理。一般是与JVM相关的问题,如系统崩溃,内存溢出,方法调用栈溢出等,如:经常遇到的StackOverflowError、OutOfMemoryError。这种类型的错误,编译器不做检查,都是系统运行过程中发生的。这些错误靠我们程序本身是无法处理与预防的,遇到了建议直接程序中止、重启。

Exception:程序可以处理的异常,捕获后可处理。

Exception异常是程序能够捕获的,也可以做异常处理,我们要尽可能的去处理,使程序继续运行,而不是中止程序。

总结一下就是Error是程序无法处理的错误,Exception是可以处理的异常。

RuntimeException与否区别

上图中Exception有两种类型的异常,我们来看一下RuntimeException:不可预知的,程序应当自行避免

何为不可预知?如:数组下标越界,访问对象空指针等,这种异常是我们小伙伴们在编写程序时要尽量避免。也就是我们程序员是能够避免的。如针对空指针异常,我们应该在编程的时候,加上空指针判断,if(obj == null) 如何如何,这样就避免了空指针异常。

非RuntimeException:可预知的,编译器可检查的异常

可预知,如:在我们打开一个文件时,如文件不存在引用的异常。这种异常编译器会检查出来,必须需要处理的。这个也称之为Checked Exception异常类型

责任归属

我们从责任角度看

1、Error属于JVM需要承担的责任 2、RuntimeException是程序应该承担的责任 3、非RuntimeException(CheckedException)可检查异常是JAVA编译器应该承担的责任

上面代码直观一点:

我们看到Error和RuntimeException编译器是不检查的,而CheckedExcepton异常编译器是检查的,也就是我们程序员是必须要捕获处理的。那怎么处理呢?

1、try-catch方式

用try-catch方式捕获这个异常,可以在catch代码段进行异常逻辑处理,这个就按照实际业务而定。如上图代码是FileNotFound异常,根据这个类型我们就知道是文件句柄不存在,那我们应该做哪些处理。如:提示一下用户该文件不存在

2、上抛异常方式在复杂的业务中,我们的程序员自己写的模块,很有可能被其他程序员写的模块进行引用,为了能够让其他程序员知道我们模块的异常,并要他们要进行处理,我们就可以采用上抛异常方式

我们看一下上层调用的处理

我们看到上抛异常,是需要调用方进行处理的。那处理的方式是什么呢?其实就是上面讲的try-catch或继续上抛。

常见的Error和Exception

一、RuntimeException

1、NullPointerException - 空指针引用异常2、ClassCastException - 类型强制转换异常3、IllegalArgumentException - 传递非法参数异常4、IndexOutOfBoundsException - 下标越界异常5、NumberFormatException - 数字格式异常

二、非RuntimeException

1、ClassNotFoundException - 找不到指定class异常2、IOException - IO操作异常

三、Error

1、NoClassDefFoundError - 找不到class定义的异常2、StackOverflowError - 深递归导致栈被耗尽抛出的异常3、OutOfMemoryError - 内存溢出异常

总结

今天老顾介绍了异常的相关知识,这点在我们系统开发时是非常重要的,尤其在我们设计系统时,要定义我们系统自己的异常,这个需要整体规划异常类型、异常Code、异常信息等,能够起到很好的排查问题,并方便捕获处理

小疑惑

在捕获异常时,用到try-catch,会经常用到finally关键字,小伙伴应该都知道这个是保证代码一定会被执行,如:关闭JDBC链接、保证锁unlock等。那小伙伴们猜猜下面两段代码执行结果是什么?代码一:

代码二:

小伙伴,可以把答案写在留言板中。谢谢!!!



进入小程序留言板

相关推荐

实战python中Random模块使用(python中的random模块)

一、random模块简介Python标准库中的random函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等。要在Python中使用random模块,只需要...

Python随机模块22个函数详解(python随机函数的应用)

随机数可以用于数学,游戏,安全等领域中,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。平时数据分析各种分布的数据构造也会用到。random模块,用于生成伪随机数,之所以称之为伪随机数,是...

说冲A就冲A,这个宝藏男孩冯俊杰我pick了

爱奇艺新上架了一部网剧叫《最后一个女神》。有个惊人的发现,剧里男三居然是《青春有你》的训练生冯俊杰。剧组穷,戏服没几件,冯俊杰几乎靠一件背背佳撑起了整部剧。冯俊杰快速了解一下。四川人,来自觉醒东方,人...

唐山打人嫌犯陈继志去医院就医的背后,隐藏着三个精心设计的步骤

种种迹象表明,陈继志这帮人对处理打人之后的善后工作是轻车驾熟的,他们想实施的计划应该是这样的:首先第一步与伤者进同一家医院做伤情鉴定,鉴定级别最好要比对方严重,于是两位女伤者被鉴定为轻伤,他们就要求医...

熬夜会造成神经衰弱,别再熬夜了(熬夜会加重神经衰弱吗)

长时间熬夜会出现神经衰弱,皮肤受损,超重肥胖,记忆力下降等现象……熬夜了能补回来吗?每天少睡一两个小时算熬夜吗?必须上夜班怎么办?如何减少熬夜伤害?戳图转给爱熬夜的TA!via央视新闻来源:河北省文...

落叶知秋的图片爬取(落叶知秋的图片有哪些?)

importrequestsfrombs4importBeautifulSoupimporttimeimportjsonpathimportjsonfromurllib.parsei...

小心有毒!长沙海关查获藏匿在“巧克力威化涂层”中的大麻

来源:海关发布近日,长沙黄花机场海关对一票申报为“巧克力威化涂层”的进境快件进行机检查验时,在包裹内查获封装于各独立威化饼干包装袋中的大麻230克。另从其他申报为“巧克力、儿童早餐谷物”的快件中查获藏...

钧正平:编造传播这种谣言,荒谬(钧正公司)

来源:钧正平工作室官方微博【钧评编造传播这种谣言,荒谬!】目前,乌克兰安全形势还在迅速变化之中,各方面安全风险上升。相关事件网上热度极高,倍受瞩目。然而,有一些人却借机大肆制造散播一些低级谣言,比如...

幸运角色过去了,谈一谈DNF起源的元素

总的来说伤害比上个版本强太多了,打卢克每日和团本明显能感觉的到。目前打团B套+圣耀稍微打造下应该都能随便二拖了。组队基本上都是秒秒秒(以前得强力辅助,现在随便带个毒奶都行)。单刷除了王座和顶能源阿斯兰...

DNF元素超大凉打桩测试(把括号的伤害加起来好像比较正常)

最近修练场的二觉老是很奇怪,发现以前都是习惯性先减抗然后丢二觉,结果伤害。。。直接丢二觉就正常了下面是其他技能伤害,没达到BUG线,估计问题不大。装备打造方面:全身红字加起来353(41*5+74*2...

ANSYS接触和出图技巧(ansys rough接触)

1.ANSYS后处理时如何按灰度输出云图?1)你可以到utilitymenu-plotctrls-style-colors-windowcolors试试2)直接utilitymenu-plotctr...

ANSYS有限元使用经验总结-后处理(4)

28.求塑性极限荷载时,结构的变形应该较大,建议把大变形打开。...

CFopen21.1、CFopen21.2都来了(cfile open)

[呲牙][赞][加油]

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

取消回复欢迎 发表评论:

请填写验证码