论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
后端开发
›
Java
›
Java异常类型
Java异常类型
水军大提督
金牌会员
|
2024-11-28 15:01:02
|
显示全部楼层
|
阅读模式
楼主
主题
872
|
帖子
872
|
积分
2616
一、异常体系架构
1.1 体系图解
1.2 Exception & Error
Exception
表示程序可以处理的异常情况,通常是由于程序逻辑错误或运行时问题引起的,比如NullPointException、IOException等。这些异常是设计用来被程序捕捉,并采取相应的规复措施来继续实验,即具有可规复性。
Error
表示系统级的错误,通常是是假造机无法规复的错误,如OutOfMemoryError、StackOverflowError等。这些错误通常不期望程序能够处理,即不建议利用try...catch进行捕捉处理,由于他们通常表明JVM本身遇到了严峻问题,不具有可规复性。
对于Error类及其子类的严峻错误,通常由以下几个处理原则:
不保举捕捉处理
:Error类及其子类通常表示程序无法继续正常运行的情况。捕捉这些异常通常没有意义,由于它们表示的问题是程序无法控制和规复的。例如,如果程序遇到了0ut0fMemoryError纵然捕捉了这个异常,程序也无法继续实验,由于内存已经耗尽。
程序中止
:大多数Error类异常都是程序运行时的严峻问题,它们通常会导致程序停止。捕捉这些异常可能会导致程序处于一个不确定的状态,这可能比程序直接停止更伤害。
资源清理
:尽管不保举捕捉Error类异常,但在某些情况下,你可能想要在程序停止之前进行一些资源清理工作。在这种情况下,可以在catch块中添加资源释放的代码,但通常不会尝试规复程序的正常实验。
日志记载
:在捕捉Error类异常时,一个常见的做法是记载具体的错误信息,这对于事后分析和调试是有资助的。这可以通过在catch块中添加日志记载代码来实现。
用户友好的反馈
:如果程序是面向用户的,那么在捕捉Error类异常时,可以向用户提供一些友好的错误信息,而不是让程序突然瓦解,如许可以进步用户体验。
程序设计
:在设计程序时,应该尽量避免可能导致Error类异常的情况。例如,通过公道的资源管理和错误处理来镌汰0ut0fMemoryError的发生。
Simple Conclusion
总结来说,Exception是程序可以并且应该处理的异常,而Error是程序通常无法处理的严峻错误。在现实编程中,我们通常会关注如何处理Exception,而对于Error,我们更多的是通过代码优化和资源管理来尽量避免它们的发生。
1.3 Checked Exceptions & UnChecked Exceptions
Checked Exceptions
即检查型异常,指那些在编译时必须被处理的异常。它们通常是由于外部因素引起的,比如文件找不到、网络问题等。这类异常的存在有助于进步代码的健壮性,由于编译器会强制开发者处理这些潜在的错误情况——必须在编译时处理,要么通过try-catch语句捕捉处理,要么通过方法签名中的throws关键字声明抛出。Exception的子类(RuntimeException及其子类除外)都是检查型异常。
Unchecked Exceptions
即非检查型异常,指那些在编译时不必要被处理的异常。它们通常是由于程序内部逻辑错误引起的比如数组越界、空指针引用等。这类异常通常表示程序中的错误,这些错误应该在开发阶段被修复,而不是在运行时通过异常处理机制来处理,因此编译器也并不会强制开发者捕捉或声明抛出这些异常。RuntimeException及其子类属于非检查型异常,固然,Error及其子类也归属于非检查型异常。
Simple Compare
二、异常的声明、抛出与捕捉
2.1 声明异常
对于检查型异常,可以通过throws关键字声明,即在方法签名中声明,表示该方法可能会抛出异常。此时如果抛出了异常,那么方法调用者必要自己处理或继续声明和抛出。当你的方法无法处理某种异常,或者你希望调用者来处理这种异常时,你可以选择在方法签名中利用throws声明异常。
2.2 抛出异常
抛出异常只会发生在方法内部,利用throw关键字抛出一个异常实例,由于异常实例是一个对象,所以抛出时都是 throw new xxxException 。当你的代码到达一个无法正常继续实验的状态,或者必要关照方法的调用者出现了一个异常情况时,就可以在代码中利用throw关键字来抛出一个异常。
2.3 捕捉处理异常
如果想要捕捉并处理异常,是的程序以期望的步骤运行,就必要利用try-catch进行异常的捕捉。try代码块中放可能产生异常的代码,catch中进行异常的处理,可以选择抛出——即利用throw关键字,也可以选择记载异常日志,进行异常处理等。
2.4 throws、throw、try-catch、try-catch-finally、try-finally
利用了throws声明异常后,方法代码块中可以倒霉用throw手动抛出异常,如果某句代码产生了声明的异常,会自己抛出。固然也可以手动抛出所声明的异常,常用于自界说异常。
利用了throws声明异常后,是否还必要try-catch去捕捉?如果在catch代码块中,并没有手动利用throw去抛出异常,那么这时间throws的声明是多余的。即方法调用者永远无法知道发生了什么异常,由于异常已经被捕捉处理。
利用try-catch的时间,如果catch中声明的异常类型(一个try可以多个catch)没有匹配到try块中产生的异常,异常仍旧会向上传播。catch块中常常是处理异常,打印异常日志信息等,一样平常不做异常的抛出。如果做了异常的抛出,那我们希望要在方法签名上声明该异常。
利用try-catch-finally的时间,纵然catch中没有捕捉到发生的异常,finally中的代码块始终会被实验。
利用try-finaly的时间,如果发生了异常,异常不会被捕捉,会向上传播。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
水军大提督
金牌会员
这个人很懒什么都没写!
楼主热帖
MySQL高可用架构搭建实战
让软件飞——“X+”技术揭秘 ...
可观测性和传统监控的三大区别 ...
哈希算法-SHA-256-过程详解
camunda工作流实战项目(表单设计器+流 ...
Docker(11)-- DockerFile详解
Could not resolve host: mirrorlist.c ...
1. SQL
使用 OpenTelemetry 和 Loki 实现高效 ...
TP 判断IP是否在国内
标签云
挺好的
服务器
快速回复
返回顶部
返回列表