[Java]【异常处理】在项目开发中的通用规范
这一问题,已苦恼多日,上述答案系近整整2日广泛阅读书籍、博客、网络问答后,归纳并苦思而成。
本博文仅罗列总的观点,各观点的具体解释,可私信Word笔记。
如需转载or复制时,请注明出处。
本博文同步发表于知乎:在Java的异常处理机制中,什么时候应该抛出异常,什么时候捕获异常?
一 通用规范 - 1
0 延迟【捕获】,尽早【抛出】,【量力】而行。
1 ☆尽量避免且不捕获本可避免的【Unchecked异常】
2 ☆不用异常做【流程/条件控制】
3 ☆finally块:必须关闭资源对象、流对象;有异常时,亦需try-catch捕获;
4 ☆return语句:不能在 finally 块中使用
5 ☆抛出的异常 := 捕获的异常OR 抛出的异常的父类
6 △错误码For对外API | 友好提示信息For用户终端 | 抛异常For内部应用
7 △方法空值处理:允许为null,注释需详尽
8 △防止NPE
二 抛出异常情况 - 2
1 [WHEN]通知信号:传递信号,需告知【调用方】
2 [WHEN]无能为力:【被调用方/本方法】无能力处理的异常,【调用方】有能力处理
3 [WHEN]框架考量:【框架】层面的需要
4 △[WHAT]抛具体的|业务的异常,禁抛Throwable|Exception|RuntimeException
三 捕获异常情况 - 3
1 从特殊到一般:捕获/处理N个异常的顺序
2 ☆非稳定的代码:只捕获可能产生异常的【非稳定代码】
3 ☆顶层调用者:必须处理异常,转换为用户可理解的内容
4 ☆回滚事务:手动回滚try块在事务代码中的事务

参考文献
[0] Java语言程序设计 - 华南理工大学出版社(王振飞 孙媛 著)
[1] 阿里巴巴开发规范手册
[2] 在Java的异常处理机制中,什么时候应该抛出异常,什么时候捕获异常?-Zhihu
[3] Java异常的正确使用姿势 – OSChina
[4] Java设计出checked exception有必要吗? - Zhihu
[Java]【异常处理】在项目开发中的通用规范的更多相关文章
- 《Maven在Java项目开发中的应用》论文笔记(十七)
标题:Maven在Java项目开发中的应用 一.基本信息 时间:2019 来源:山西农业大学 关键词:Maven:Java Web:仓库:开发人员:极限编程; 二.研究内容 1.Maven 基本原理概 ...
- Java项目开发中实现分页的三种方式一篇包会
前言 Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...
- Java 反射在实际开发中的应用
运行时类型识别(RTTI, Run-Time Type Information)是Java中非常有用的机制,在java中,有两种RTTI的方式,一种是传统的,即假设在编译时已经知道了所有的类型:还有一 ...
- [转]Java 反射在实际开发中的应用
一:Java类加载和初始化 1.1 类加载器(类加载的工具) 1.2 Java使用一个类所需的准备工作 二:Java中RTTI 2.1 :为什么要用到运行时类型信息(就是RTTI) 2.2 :RTT ...
- 项目开发中Maven的单向依赖-2022新项目
一.业务场景 工作多年,在真实的项目开发中经常会遇到将一个项目拆分成多个工程的情况,比如将一个真实的项目拆分成controller层,service层, dao层,common公共服务层等等.这样拆分 ...
- 团队项目开发中,常见的版本控制有svn,git
团队项目开发中,常见的版本控制有svn,git
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- Angular 项目开发中父子组件传参
在项目开发中经常会遇到 组件之间传参的问题.今天总结下在使用angular的项目中父子组件传参的问题: 1.父组件向子组件传参: 然后在父组件中 然后在父组件的html中 然后就可以在子组件中使用了 ...
- 炼金术(1): 识别项目开发中的ProtoType、Demo、MVP
软件开发是很分裂的,只有不断使用原则和规律,才能带来质量. 只要不是玩具性质的项目,项目应该可以大概划分为0-1,1-10,10-100,100-1000四个种重要阶段.其中,0-1是原型验证性的:1 ...
- 项目开发中的git简单使用
原文地址: https://www.zhuyilong.fun/tech/the-blog-git.html 示例远程仓库地址: https://github.com/zhu-longge/gitWo ...
随机推荐
- vue npm安装指令汇总
1.elmentui:npm i element-ui -S 2.打印插件:npm install vue-print-nb --save 3.时间转换插件Moment:npm install mom ...
- 初次接触软构和git(使用eclipse)
目录: 一.git和github 二.软件构造lab1常见问题(eclipse) 一.git和github 1. git的安装 百度git然后去官网安装即可,不会的可以去百度查一下. 2. git和g ...
- 使用React脚手架初始化项目
1.npx create-react-app my-app------>是项目名 2.cd my-app 3.npm start
- 20181224《网络攻防技术》Exp7 网络欺诈防范
20181224<网络攻防技术>Exp7 网络欺诈防范 目录 20181224<网络攻防技术>Exp7 网络欺诈防范 相关知识点总结 ARP Spoofing IP源地址欺骗 ...
- openfire开源IM服务器知识分享+社交app实战
一. 概述 Openfire最主要的功能是实现XMPP服务器,简单来说,openfire为我们提供一个固定的地址,我们只需要向openfire服务器发送标准的XMPP信息(即XML文件流), ...
- CMMI的软件工程13-16章读书笔记
一.软件测试 软件测试是为了发现程序中的错误而执行的过程.测试只能证明软件有错,而不能保证软件程序没错. 1. 软件版本 Alpha版 公司内测版本 Beta版 对外公测版本 发布版 正式发布版本 ...
- 关于在html中不能正确的打出字符
由于在html中一些字符不能正确的使用,例如大于号或者小于号,浏览器在解析的过程中会将其误认为标签,那html也是非我们提供了一些预留字符,如下(部分): 1.大于号(>):> 2. ...
- 转载·Pycharm Pro“This license 56ZS5PQ1RF has been cancelled” 激活码失效处理记录
今天打开许久没用的Pycharm提示激活码过期,激活提示:"This license 56ZS5PQ1RF has been cancelled" 解决方法如下 首先修改hosts ...
- Linux env commands
1.新机新增root 密码 sudo passwd root 2.新增用户密码 sudo passwd YOUR_USER_NAME NEW PW: NEW PW: 3.SSH Server sudo ...
- 静态类型和动态类型VS强类型和弱类型
强类型语言和静态类型语言有什么区别? 静态类型的语言具有类型系统,该类型系统在实现时由实现(编译器或解释器)检查.类型检查拒绝某些程序,并且通过检查的程序通常带有一些保证.例如,编译器保证不对浮点数使 ...