exception都有什么类型的(作为一个程序员)

作为一个开发人员,可以说日常的生活基本就是跟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 之类,通常是可以编码避免的逻辑错误,具体根据需要来判断是否需要捕获,并不会在编译期强制要求。

异常继承体系

实际项目中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都有什么类型的(作为一个程序员)(1)

奔跑

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

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页