T31学习笔记Day05

这篇博客探讨了JAVA异常处理的流程,包括try with resource的使用,以及如何优雅地处理空指针异常(NPE)场景。此外,文章还详细介绍了日志的规约,如日志的功能、时效、记录和输出规约,以及错误码的定义和管理,旨在提高代码质量和系统稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第五天 异常处理与日志

在销售业务中,有一个很重要的模块是售后模块,负责客户的不良品处理,纠纷处理,产品维修等等。同样的,在电商代码中,也有一个重要的模块就是异常的处理和日志模块,负责代码的异常信息反馈和预防,为系统的稳定运行保驾护航。

JAVA异常的处理流程

当程序发生异常时,jvm会实例化异常对象信息,然后判断该异常是否被try包裹,如果未包裹,JVM直接抛出异常信息,该段代码结束执行。如果被try包裹,进入try catch流程,catch执行完之后判断是否有finally,如果有finally,进入finally流程。try catch finally执行完之后。如果finally未出现异常,将继续执行代码。

try catch finally 流程中,如果finally里定义了return,那么无论try代码中的return了什么内容,都会被finally的return覆盖,所以finally中不要return。

try with resource

在JDK7中加入了一种新的try with resource结构,用于应对io流打开关闭的场景,方便的处理了io关闭的很多麻烦。

代码示例如下:

try(FileInputStream fin = new FileInputStream(new File("filePath"));

FileOutputStream fout = new FileOutputStream(new File("filePath1"));

GZIPOutputStream out = new GZIPOutputStream(fout)

){

// 读文件

}catch(IOException e){

logger.error(e.getMessage());

e.printStackTrace();

}

NPE场景的处理对策

JDK8的 Optionnal类可以优雅的防止NPE,而不是像之前一样写了一大堆if(null != object) 。在优化代码的同时也提升了代码执行效率,循环次数越高,性能差距越大,并且成指数级上升。

特殊异常场景及其处理对策

foreach遍历集合的异常

1.不要在foreach循环里进行元素的remove/add操作,foreach实质上是Iterator

日志规约

日志的功能:发生异常的时候快速定位问题发生点。

日志时效:当天日志以应用名.log命名。过往日志命名格式:应用名.log.yyyy-MM-dd,日志文件至少保存15天,用以排查某些周期为周甚至更长时间发生的异常。由于网络安全相关规定,敏感操作信息联机存储6个月以上,同时还可以用来作为解决纠纷的依据。

日志记录规约:1.使用slf4j,JCL框架的API。2.在日志输出时,字符串变量之间的拼接使用占位符的方式。3.日志打印时禁止直接使用JSON工具将对象转换成String 。4.尽量用英文来描述日志错误信息。

日志输出规约

1.日志级别开关判断。对于trace/debug/info级别的日志输出,必须进行日志级别的开关判断。

2.异常日志信息要完整。异常日志信息应该包括异常案发现场信息,异常堆栈信息。

3.避免重复打印日志。重复打印日志,浪费磁盘空间,务必在日志配置文件中设置additivity=false。

错误码规约

1.定义时要有字母也要有数字

2.要分级分类管理

3.不能直接输出给用户作为提示信息使用

4.不要与业务框架或者组织架构挂钩

5.使用者避免随意定义新的错误码

6.便于不同语言的开发者之间协作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值