[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块在事务代码中的事务
![](https://img2020.cnblogs.com/blog/1173617/202011/1173617-20201114224815928-385252965.png)
参考文献
[0] Java语言程序设计 - 华南理工大学出版社(王振飞 孙媛 著)
[1] 阿里巴巴开发规范手册
[2] 在Java的异常处理机制中,什么时候应该抛出异常,什么时候捕获异常?-Zhihu
[3] Java异常的正确使用姿势 – OSChina
[4] Java设计出checked exception有必要吗? - Zhihu
相关文章
- 【JAVA】Eclipse如何导入其他电脑中的项目?(图文,已解决!)
- java命令 : java -jar 和 java -cp
- nohub启动java项目
- 《Java特种兵》5.2 线程安全(二)
- 分享 java 基础 + 进阶精简资料(视频 + 源码 + 就业项目 + 面试报装)
- Java开发环境的搭建以及使用eclipse从头一步步创建java项目
- Java集合框架
- Java网页数据采集器[下篇-数据查询]【转载】
- java.lang.NullPointerException
- 《Java EE 7精粹》—— 2.5 非阻塞I/O
- Java并发编程:CountDownLatch、CyclicBarrier和Semaphore
- 基于Java实现(图形界面)聊天系统【100010282】
- java中获取类加载路径和项目根路径的5种方法
- Java实现冒泡排序算法
- 三、IntelliJ IDEA创建java项目
- Windows下IDEA run能运行springboot,java -jar maven打的包拉有中文的nacos配置,报org.yaml.snakeyaml.error.YAMLException错误解决
- Java_java动态编译整个项目,解决jar包找不到问题
- GIS管网项目-flex/java
- Java多线程之实现Runnable接口
- Java项目----Springboot-Management
- Java中的IO流如何理解——精简
- Java Web项目整体异常处理机制
- 上机题目(中级)- 两个超级大的整数相加相减 (Java)
- JAVA card 应用开发(二) 在项目添加APPLET
- LAN公布java web项目的方法的外侧
- IDEA创建java项目并打包成jar包
- 【Java/Spring】Spring的配置问题,IDEA报错“No mapping found for HTTP request with URI […] in DispatcherServlet”
- Java idea 显示启动界面,不直接打开项目
- Idea创建/导入/移除Java项目
- java为什么是一次编译,多次解释