Java异常

认识Java异常

 

throw(抛出)和throws(声明)的区别

throws一般用于检查型异常,就是编译时就有需要声明或者捕获的异常,表示此方法不处理异常,而交给方法调用处进行处理

throw一般用于运行时异常,继承于(RuntimeException),并且不需要throws Exception

 

异常大体分为两类

一类是RuntimeException,程序中完全可以避免的类似:数组越界异常,空指针异常

一类是非RuntimeException,是程序无法避免的,例如程序在读取文件,正好磁盘出现问题,就会引发IOException,这个靠完美代码无法解决的异常,需要我们告诉程序遇到这类问题后该怎么做

比如文件找不到、网络超时,则抛出编译时异常,否则比如磁盘满,抛运行时异常

参考

1、Throw用于方法内部,Throws用于方法声明上
2、Throw后跟异常对象,Throws后跟异常类型
3、Throw后只能跟一个异常对象,Throws后可以一次声明多种异常类型

 

对异常处理的一些主观见解

 

处理异常

  1. 对于一些可预见的错误,如对象可能为空,可直接通过if判断,然后继续执行逻辑
  2. 对于不可预知的情况,如服务器冒烟了,打雷劈中机房了,需要使用try-catch来对异常进行处理

Spring中的异常事务

  1. 对于@Transactional可以保证RuntimeException错误的回滚,如果想保证非RuntimeException错误的回滚,需要加上rollbackFor = Exception.class 参数(这时,只要报错都会回滚)。
  2. 在1的前提下如果要在@Transactional注解的方法中使用try-catch,那么需要明确的抛出throw 异常,才能被Spring的事务所支持,且回滚

非常清晰的Spring事务参考

 

异常导致的问题

  1. throw或者throws异常会导致程序终止
  2. try-catch会捕获异常并且继续执行方法剩余的代码,也可以通过return终止方法
上一篇:java基础(七):异常


下一篇:.Net Core 缓存方式(二)AddDistributedSqlServerCache实现(2)