这一问题,已苦恼多日,上述答案系近整整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]【异常处理】在项目开发中的通用规范的更多相关文章

  1. 《Maven在Java项目开发中的应用》论文笔记(十七)

    标题:Maven在Java项目开发中的应用 一.基本信息 时间:2019 来源:山西农业大学 关键词:Maven:Java Web:仓库:开发人员:极限编程; 二.研究内容 1.Maven 基本原理概 ...

  2. Java项目开发中实现分页的三种方式一篇包会

    前言   Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...

  3. Java 反射在实际开发中的应用

    运行时类型识别(RTTI, Run-Time Type Information)是Java中非常有用的机制,在java中,有两种RTTI的方式,一种是传统的,即假设在编译时已经知道了所有的类型:还有一 ...

  4. [转]Java 反射在实际开发中的应用

    一:Java类加载和初始化 1.1 类加载器(类加载的工具) 1.2 Java使用一个类所需的准备工作 二:Java中RTTI 2.1 :为什么要用到运行时类型信息(就是RTTI) 2.2  :RTT ...

  5. 项目开发中Maven的单向依赖-2022新项目

    一.业务场景 工作多年,在真实的项目开发中经常会遇到将一个项目拆分成多个工程的情况,比如将一个真实的项目拆分成controller层,service层, dao层,common公共服务层等等.这样拆分 ...

  6. 团队项目开发中,常见的版本控制有svn,git

    团队项目开发中,常见的版本控制有svn,git

  7. 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获

    项目开发中的一些注意事项以及技巧总结   1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...

  8. Angular 项目开发中父子组件传参

    在项目开发中经常会遇到 组件之间传参的问题.今天总结下在使用angular的项目中父子组件传参的问题: 1.父组件向子组件传参: 然后在父组件中 然后在父组件的html中 然后就可以在子组件中使用了 ...

  9. 炼金术(1): 识别项目开发中的ProtoType、Demo、MVP

    软件开发是很分裂的,只有不断使用原则和规律,才能带来质量. 只要不是玩具性质的项目,项目应该可以大概划分为0-1,1-10,10-100,100-1000四个种重要阶段.其中,0-1是原型验证性的:1 ...

  10. 项目开发中的git简单使用

    原文地址: https://www.zhuyilong.fun/tech/the-blog-git.html 示例远程仓库地址: https://github.com/zhu-longge/gitWo ...

随机推荐

  1. 在css 中使用calc并且含有变量

    bottom:~"calc(.9rem + constant(safe-area-inset-bottom))";   bottom:~"calc(.9rem + env ...

  2. 高并发解决方案之 redis 分布式锁

    背景:秒杀服务中要写一个定时任务:活动到期时给order微服务发送关闭订单的通知.这需要改变数据库表中的数据,而集群中服务是多节点的方式进行部署,会出现并发执行的情况,所以采用的redis的分布式锁的 ...

  3. 搭建sftp服务器

    sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装 1.  创建sftp组 # groupadd sftp   创建完成之后使用ca ...

  4. Spring Boot基础依赖

    <properties> <java.version>1.8</java.version></properties><parent> < ...

  5. c# + appium 连接设备自动化

    //private static AndroidDriver<AppiumWebElement> _driver; //private static AppiumLocalService ...

  6. 【Unity】Lua热重载

    写在前面 本文讨论的"Lua热重载"是基于他人现成工具和相关博文上展开的,所以这里并不会重复实现一遍工具,主要记录我的理解过程. Lua热重载 探索 偶然在知乎上翻到一篇文章&qu ...

  7. HTML5的语义标签

    H5新增了很多标签,也更加语义化了,但是除了header.footer.nav等,其他的还真的没有去了解过,今天整理一下H5新增的语义化标签. Header: 不用多说,就是定义头部,可以多个. Fo ...

  8. JavaScript之jQuery要点记录

    一 属性和属性节点 1.什么是属性? 对象身上保存的变量就是属性 2.如何操作属性? 对象.属性名称 = 值; 对象.属性名称; 对象["属性名称"] = 值; 对象[" ...

  9. Python命令提示符:不是内部或外部命令,也不是可运行的程序或批处理文件

    Python原装IDE(Integrated Development Environment)安装时,需要确认更新pip(什么是 pip ?pip 是 Python 中的标准库管理器.它允许你安装和管 ...

  10. java: javacTask: 源发行版 8 需要目标发行版 1.8

    idea同一工作空间中不同工程使用不同的jkd版本.在本地idea同时使用jdk1.7和jdk1.8,不同的java工程使用不同的jdk版本,但是在java代码编译时报错,其报错信息为:[java: ...