[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 ...
随机推荐
- linux一些指令
一. 文件操作命令 查看当前目录下的文件或文件夹 详细查看ls –l 每列代表不同的意义: 第一列drwxr-xr-x 表示权限, n 其中第一个字符d表示 目录(可能有b-块 ...
- prometheus 配置数据保留7天时间storage.tsdb.retention.time
1.修改配置如下: 默认24h添加配置:retention: 168h
- 【C++小程序】《我要抽签》b1.0做好了~
也许是的,得横空出世了 如你所见 这款基于\(C++\)能模仿Mrs. Yao抽签系统的cpp终于做完了啦~ 初期功能很少.\(BUG\)极多. 所以为了您的体验:) 请遵守格式 代码: #inclu ...
- centos7安装ffmpeg shell脚本
#!/bin/sh # # Date: 2021-04-28 # Author: yb # Description: 安装ffmpeg # 检测当前用户是否为root [ $(id -u) != &q ...
- jmeter&badboy安装
一.jmeter下载地址: 1. http://jmeter.apache.org/download_jmeter.cgi \ https://www.apache.org/dist/jmete ...
- 纯前端实现后端给数据进行文件导出——angular里面的使用
interface dataList { cmd_cnt: number; risk_name: string; user_cnt: number; risk_type:string; } listO ...
- NOIP2010普及组
T2]接水问题 有一些小细节,比如如果最小值存在多个,比如最后还需要一个完全结束的最大值 #include<iostream> #include<cstring> #inclu ...
- filter CTF
filter CTF 输入url http://dc1ce3ad-eed4-48fd-a068-71aef12f7654.node.vaala.ink?file=demo.php 参考题目filter ...
- django生命周期流程以及无有名分组和反向解析 JsonResponse和form表单上传
django的请求生命周期流程图 要求每个人必须会画,帮助你梳理django的大致流程 路由层 1. 路由匹配:urls.py 这个文件是django框架的总路由文件,意味着还有分路由文件,每个应用都 ...
- 自定义组件中使用half-screen-dailog 无法舒勇外部样式
为了将弹窗更方便的调用,封装了组件,但是发现一个问题, 外部样式类在组件中是无法正常使用的. 也就说在组件的wxss中是无法正常使用.weui-half-screen-dialog 这个外部样式类,然 ...