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),这样就做成一个只读事务,可以提高效率。

目录
相关文章
|
Java 应用服务中间件 Linux
tomcat学习二:tomcat部署多个项目:不修改端口和修改端口 两种方式详解
这篇文章详细介绍了在Tomcat服务器上部署多个项目的方法,包括不修改端口和修改端口两种方式。
823 0
|
Ubuntu NoSQL Linux
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
这篇文章详细介绍了Docker的基本使用,包括Docker的安装、常用命令、架构概念等,并通过图解和实践帮助读者快速掌握Docker的使用方法。
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
|
Java 计算机视觉
如何快速有效降低 JavaCV 依赖包体积?
如何快速有效降低 JavaCV 依赖包体积?
1266 2
|
XML 存储 Java
SpringBoot bean自动装配原理,这一篇就够了! 1
SpringBoot bean自动装配原理,这一篇就够了!
|
XML SQL Java
SpringBoot bean自动装配原理,这一篇就够了! 2
SpringBoot bean自动装配原理,这一篇就够了!
|
消息中间件 缓存 NoSQL
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
Java多线程实战-CompletableFuture异步编程优化查询接口响应速度
|
SQL 存储 分布式计算
大数据Hive入门概述
大数据Hive入门概述
577 1
|
XML 开发框架 Java
一个 Java 接口快速开发框架:magic-api
magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成,自动映射为HTTP接口。无需定义Controller、Service、Dao、Mapper、XML、VO等Java对象即可完成常见的HTTP API接口开发。
一个 Java 接口快速开发框架:magic-api
|
Web App开发 JavaScript 安全
利用pdf.js在线展示PDF文档
利用pdf.js在线展示PDF文档
592 0