作为一个程序员,你真的知道Exception和Error有什么区别吗?[通俗易懂]

作为一个程序员,你真的知道Exception和Error有什么区别吗?[通俗易懂]作为一个开发人员,可以说日常的生活基本就是跟bug打交道。Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处

大家好,欢迎来到IT知识分享网。

作为一个开发人员,可以说日常的生活基本就是跟bug打交道(苦逼),bug出现后基本都是以Exception 和 Error的形式呈现给程序员的,那么你真的知道Exception和Error有什么区别吗?今天小猿梅就来讲下我的理解。

Exception 和 Error 都是继承了 Throwable 类,在 Java 中只有 Throwable 类型的实例才可以被抛出(throw)或者捕获(catch),它是异常处理机制的基本组成类型。

Exception 和 Error 体现了 Java 平台设计者对不同异常情况的分类。Exception 是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。

Error 是指在正常情况下,不大可能出现的情况,绝大部分的 Error 都会导致程序(比如 JVM 自身)处于非正常的、不可恢复状态。既然是非正常情况,所以不便于也不需要捕获,常见的比如 OutOfMemoryError 之类,都是 Error 的子类。

Exception 又分为可检查(checked)异常和不检查(unchecked)异常,可检查异常在源代码里必须显式地进行捕获处理,这是编译期检查的一部分。前面我介绍的不可查的 Error,是 Throwable 不是 Exception。

不检查异常就是所谓的运行时异常,类似 NullPointerException、ArrayIndexOutOfBoundsException 之类,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译期强制要求。

追问:你了解哪些 Error、Exception 或者 RuntimeException?

作为一个程序员,你真的知道Exception和Error有什么区别吗?[通俗易懂]

异常继承体系

实际项目中Log使用规范

1、记录log的目的:系统稳定性

系统行为的记录和监控

问题(线上bug、业务疑点等)的定位

2、好的日志系统应该如何

自动的分类记录系统中各种事件行为(例如:http访问、rpc调用、消息的产生和消费等等)

业务日志单独记录、方便问题定位

异常日志、即时告警

日志能够自动记录行为的主体、登陆态

链路追踪

3、我们的log系统

通过PrefFilter来在特定的文件中记录所有http请求的输入参数、响应时间、响应code等

生产环境记录WARN以上级别的日志、其他环境的log等级为DEBUG

部分异常日志通过钉钉群的方式产生告警、还有很多并未产生告警

4、异常日志使用规范:需要告警的使用error,否则用WARN

目前系统通过在业务代码中抛出serviceException、然后统一处理exception来达到标准错误返回值的目的

从告警的角度:serviceException太多,不可能所有这种异常都需要告警,所以所有的serviceException都不告警

部分确实需要告警的异常也被包装成为了serviceException,导致这部分无法告警通知到人,会让我们失去修复问题的时间窗口

5、如何编码

一个方法的正常处理流程:1、校验;2、业务处理;3、异常处理

校验阶段的错误应该都采用WARN

业务处理阶段的错误看情况

异常处理阶段的错误应该都采用ERROR

外部依赖:属于业务想定范围之类的错误返回应该采用WARN、业务想定之外的采用ERROR

总之:参考第四大点的规范:需要告警的使用error、否则使用WARN

作为一个程序员,你真的知道Exception和Error有什么区别吗?[通俗易懂]

奔跑

–夕阳下奔跑的身影,那是我怀恋的青春–

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/13469.html

(0)
上一篇 2023-03-07 19:59
下一篇 2023-03-07 20:59

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信