我来更新了,说说工作中的Java处理异常
背景
本周二的一个线上小事故,不过如果说是事故,也有点过于的夸张了,只是代码的异常处理不到位,将异常层层的抛给了最上层的拦截器,然后在日志中对于一些错误的调用报出异常错误,不过问题不大,经过评估,只针对于线上的一些非法用户和异常传参时才会调用。(之所以这样,因为这段代码是处理越权问题)
【友情提示】 或许这里会有小伙伴问,越权是什么?
这可不,给你准备好了!
浅谈一下什么是越权问题?
所以在这里做一个简单的处理异常的小归纳!以下摘自:ttps://dzone.com/articles/9-best-practices-to-handle-exceptions-in-java
在Java中处理异常并不是一个简单的事情。不仅仅初学者很难理解,即使一些有经验的开发者也需要花费很多时间来思考如何处理异常,包括需要处理哪些异常,怎样处理等等。这也是绝大多数开发团队都会制定一些规则来规范对异常的处理的原因。而团队之间的这些规范往往是截然不同的。
本文给出几个被很多团队使用的异常处理最佳实践。
1. 在Finally块中清理资源或者使用try-with-resource语句
当使用类似InputStream这种需要使用后关闭的资源时,一个常见的错误就是在try块的最后关闭资源。
public void doNotCloseResourceInTry() {
FileInputStream inputStream = null;
try {
File file = new File("./tmp.txt");
inputStream = new FileInputStream(file);
// use the inputStream to read a file
// do NOT do this
inputStream.close();
} catch (FileNotFoundException e) {
log.error(e);
} catch (IOException e) {
log.error(e);
}
public void doNotCloseResourceInTry() {
FileInputStream inputStream = null;
try {
File file = new File("./tmp.txt");
inputStream = new FileInputStream(file);
// use the inputStream to read a file
// do NOT do this
inputStream.close();
} catch (FileNotFoundException e) {
log.error(e);
} catch (IOException e) {
log.error(e);
}
}}
上述代码在没有任何exception的时候运行是没有问题的。但是当try块中的语句抛出异常或者自己实现的代码抛出异常,那么就不会执行最后的关闭语句,从而资源也无法释放。
合理的做法则是将所有清理的代码都放到finally块中或者使用try-with-resource语句。
public void closeResourceInFinally() {
FileInputStream inputStream = null;
try {
File file = new File("./tmp.txt");
inputStream = new FileInputStream(file);
// use the inputStream to read a file
} catch (FileNotFoundException e) {
log.error(e);
} finally {
if (inputStream != null) {
try {
inputStream.close();
} catch (IOException e) {
log.error(e);
}
}
}
}
public void automaticallyCloseResource() {
File file = new File("./tmp.txt");
try (FileInputStream inputStream = new FileInputStream(file)我来更新了,说说工作中的Java处理异常相关推荐
- 【软件测试】盘一盘工作中遇到的 MQ 异常测试
上一篇小结了一下关于redis的异常测试,今天再来盘一盘 MQ 相关的. MQ 跟 redis 一样,也是现在系统服务中不可或缺的重要中间件,通常用来流量削峰.应用解耦.异步处理等. 之前有过一篇整理 ...
- 工作中的自我反思[实时更新]
本篇将一直记录自己工作中犯的错,需要注意的点: 1.class,click等需要命名的地方,命名的名字一定要注意.例如,上传文件的点击事件,它的标签为你就不要取名为upload了.这样当你想要快速找到 ...
- 工作中常见问题汇总(不定期更新)
基于工作中遇到的一些问题,总结一下经验: 单双引号的区别 大家都知道 php 里双引号可以解析变量,单引号不可以,其实换行符等特殊情况也需要双引号处理. $aWhiteIP = explode('\n ...
- 工作中InnoDB引擎数据库主从复制同步心得
近期将公司的MySQL架构升级了,由原先的一主多从换成了DRBD+Heartbeat双主多从,正好手上有一个电子商务网站新项目也要上线了,用的是DRBD+Heartbeat双主一从,由于此过程还是有别 ...
- 实战!工作中常用到哪些设计模式
前言 平时我们写代码呢,多数情况都是流水线式写代码,基本就可以实现业务逻辑了.如何在写代码中找到乐趣呢,我觉得,最好的方式就是:使用设计模式优化自己的业务代码.今天跟大家聊聊日常工作中,我都使用过哪些 ...
- 收藏!工作中Git使用实践和常用命令流程合集
来自:匠心Java 工作中git是一项必不可少的技能,在项目的开发进程中起着至关重要的作用 下面介绍一些git在工作中的一些使用实践.常用流程.常用命令,供大家参考! 一:前言 Git的定义是:分布式 ...
- 工作中MySql的了解到的小技巧
工作中MySql的小技巧 1. 跑脚本时,经常遇到有则更新无插入的 逻辑操作:通常情况下,来一波if()判断然后选择 更新还是插入,前两天逛论坛时发现有人在比较REPLACE INTO 和 INSET ...
- 2013年工作中遇到的20个问题:181-200
每个人在工作中遇到的问题,很多都是类似的.了解别人遇到的问题,自己遇到的时候就可以很快地解决它. 很多人不屑于这种"细节问题",但我想说,掌握这些细节问题一次可能只能帮你节省1s的 ...
- python xlrd关闭_Python在工作中的应用
作者:张昶昶,目前就职于科技开发部应用开发中心,担任测试岗位,主要负责中间业务和支付结算的日常测试工作. 前言 随着IT行业的不断发展,计算机软件在各行各业的工作中发挥了重要作用.技术的不断迭代,使得 ...
最新文章
- 2022-2028年中国灭火器行业市场前瞻与投资战略规划分析报告
- 设计模式笔记(9)---组合模式(结构型)
- excel 打开显示安装office自定义项 安装期间出错
- python培训出来的有公司要吗-参加Python培训到底需要学什么?好程序员
- Microsoft和AWS推出免费的云优化服务
- 二进制、八进制、十六进制和十进制的相互转换,原码反码补码计算以及Java中数字的存储
- 2017.4.21 2^k进制数 思考记录
- 大数据虚拟化零起点-7基础运维第六步-安装Big Data Extensions Plugin
- 实用软件工程第二版(吕云翔)课后选择答案
- 如何下载百度文库文章
- 吴昊品游戏核心算法 Round 5 —— (转载)十四步实现拥有强大AI的五子棋游戏...
- python下视频的包_Python——爬取包图网图片和视频
- dell服务器新bois系统设置u盘启动,戴尔新版本的bios怎样设置U盘启动
- 人才外包公司成本大揭露——一个外包人员的分析
- 【数据仓库学习】数据质量监控
- 三国志战略版:Daniel_袁术分析
- VS Code工作区用法
- java求水电费_水电煤缴费示例代码
- 湘鄂情更名后携手中科院瞄准大数据
- SQL:DESC和ASC的意思-1
热门文章
- POS消费机C#例子代码
- [转]C#中多路IP摄像机的视频监控系统
- Flex网站作品“妙句网”简化版推出(服务端为.Net WebService)
- 系统学习Linux11点建议
- HDU - 2176 取(m堆)石子游戏(尼姆博奕)
- python哈夫曼树_python霍夫曼树
- python代码规范工具_如何检查python3中的代码规范
- 词性标注与命名实体识别
- android 每分钟广播,每1分钟Android发布一次警报管理器?
- java数组是否包含某字符串_js判断数组是否包含某个字符串变量的实例