RuntimeException和Exception的区别

简介: RuntimeException和Exception的区别

Exception.png

本质:

RuntimeException:是不受检查异常,也就是即便不抛也不会出编译错误,虚拟机会自己抛出来,常见的:NullPointerException,ArrayIndexOutOfBoundsException,IllegalArgumentException,在实际编码过程中,你没有抛它也会自己出。

非RuntimeException:受检查异常,就必须要往上抛,否则编译出错。


设计(自定义异常应该继承谁?):

假如说,让你做一个异常的设计,你会怎么设计?

个人理解:

如果是业务上的异常,并且你知道要如何处理这个异常,那么应该extends Exception。

如果是系统异常或者调API的异常,而且这些异常你无法预料也无法去解决,那么就应该extends RuntimeException

换而言之:

继承RuntimeException可以不对异常主动处理,但发生异常时会导致程序终止。

继承Exception必须对异常主动处理,既然已经处理了,就不会导致程序终止。


Spring事务处理机制之RuntimeException()和Exception()区别:

Spring的@Transactional这个注解默认的是Error和Runtimexception才会回滚事务

如果是Exception的话,Spring是不会回滚事务的。

假如说抛Exception想回滚事务应该怎么做?

①:在service层不使用try......catch或者在catch中最后加上throw new RuntimeException(),这样程序异常时aop才可以捕获异常并进行回滚。

最终在service上层(如controller层、action层、view层)要继续捕获这个异常并处理。

②:在service层方法上进行配置,改变默认规则,方法如下 :

(1) 让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)

(2)让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)

(3)不需要事务管理的(只查询的)方法@Transactional(propagation=Propagation.NOT_SUPPORTED)

在整个方法运行前就不会开启事务还可以加上:@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true),这样就做成一个只读事务,可以提高效率。

目录
相关文章
|
NoSQL 数据可视化 关系型数据库
推荐几个好用的redis可视化工具
推荐几个好用的redis可视化工具
17564 1
|
存储 Java API
键值对魔法:如何优雅地使用Java Map,让代码更简洁?
【6月更文挑战第18天】在Java中,高效使用Map能提升代码质量。例如,Java 9引入了简洁的初始化语法`Map.of()`来创建Map。Stream API允许优雅地处理Map,如遍历、筛选和转换数据。Map的方法如`merge`用于合并键值,`computeIfAbsent`和`computeIfPresent`则在条件满足时计算并更新值。此外,Map的默认方法如`getOrDefault`提供便利。掌握这些特性可使Map操作更高效和易读。
612 57
|
Java 应用服务中间件 Linux
tomcat学习二:tomcat部署多个项目:不修改端口和修改端口 两种方式详解
这篇文章详细介绍了在Tomcat服务器上部署多个项目的方法,包括不修改端口和修改端口两种方式。
947 0
|
Ubuntu NoSQL Linux
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
这篇文章详细介绍了Docker的基本使用,包括Docker的安装、常用命令、架构概念等,并通过图解和实践帮助读者快速掌握Docker的使用方法。
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
|
XML 存储 Java
SpringBoot bean自动装配原理,这一篇就够了! 1
SpringBoot bean自动装配原理,这一篇就够了!
|
JSON 测试技术 Apache
解决 JMeter 返回内容中文乱码问题的详细指南
在Apache JMeter性能测试中,遇到中文乱码问题会影响测试效果和报告理解。解决方法包括:1) 修改`jmeter.properties`配置文件,将`sampleresult.default.encoding`设为UTF-8;2) 在HTTP请求中指定`Content-Encoding`为UTF-8,确保请求和响应编码一致;3) 使用后置处理器如JSR223处理响应数据编码;4) CSV数据文件保存为UTF-8并在JMeter中配置相应编码;5) 添加HTTP Header Manager设置`Content-Type`。
|
缓存 Java Maven
IntelliJ IDEA中无法加载jar包导致出现“cannot resolve symbol...”问题的解决
IntelliJ IDEA中无法加载jar包导致出现“cannot resolve symbol...”问题的解决
740 0
|
XML SQL Java
SpringBoot bean自动装配原理,这一篇就够了! 2
SpringBoot bean自动装配原理,这一篇就够了!
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
|
算法 Java 大数据
利用Java实现随机采样
利用Java实现随机采样
539 0