本质:
RuntimeException:是不受检查异常,也就是即便不抛也不会出编译错误,虚拟机会自己抛出来,常见的:NullPointerException,ArrayIndexOutOfBoundsException,IllegalArgumentException,在实际编码过程中,你没有抛它也会自己出。
非RuntimeException:受检查异常,就必须要往上抛,否则编译出错。
设计:
假如说,让你做一个异常的设计,你会怎么设计?
个人理解:如果是业务上的异常,并且你知道要如何处理这个异常,那么应该extends Exception.
如果是系统异常或者调API的异常,而且这些异常你无法预料也无法去解决,那么就应该extends RuntimeException
Spring事务:
Spring的@Transactional这个注解默认的是Error和Runtimexception才会回滚事务
如果是Exception的话,Spring是不会回滚事务的。
假如说抛Exception想回滚事务应该怎么做?
①:@Transactional(rollbackFor = Exception.class)
②:catch到Excetion 然后new Runtimexception往上抛