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

目录
相关文章
|
8月前
|
监控 Java 程序员
详解Java中的异常体系结构(throw,throws,try-catch,finally,自定义异常)
详解Java中的异常体系结构(throw,throws,try-catch,finally,自定义异常)
169 0
|
消息中间件 Java 中间件
业务中 自定义异常用 Exception 还是 RuntimeException? 为什么?
今天和同事 聊了下异常 相关的事,整理在此 目前公司中使用的 自定义异常是 extend RuntimeException
126 1
|
Java
Exception 和 Error 有什么区别?
Java 平台对不同的异常进行了分类,具体被分为了 Exception 和 Error,他们都是继承了 Throwable 类。
111 0
Exception 和 Error 有什么区别?
|
安全 Java 数据库连接
Exception和Error有什么区别吗
Exception和Error有什么区别吗
228 1
|
安全 Java 数据库连接
Java中的异常处理详解(try、catch、finally、throw、throws)
Java中的异常处理详解(try、catch、finally、throw、throws)
324 1
Exception和Error 有什么区别
Exception和Error 有什么区别
158 0
Exception和Error 有什么区别
|
Java
【学习笔记】【Java】try-catch-finally中,finally是在什么时候执行的:try结束、catch结束、return前
结论:try-catch-finally中,finally执行:try结束、catch结束、return前
204 0
【学习笔记】【Java】try-catch-finally中,finally是在什么时候执行的:try结束、catch结束、return前
|
安全 Java 程序员
Exception和Error的区别
Exception和Error的
219 0
|
安全
Error、Exception区别
Error、Exception区别
132 0