1. 写在前面
异常处理在平时工作中使用的场景非常多,当下对于异常的了解也仅限于一个 try{} catch{}
。缺乏对于这个模块的系统性的认知。
今天借助廖雪峰的教程,比较系统的看一下 java 中的异常处理。
2. java 中的异常

java 中对于异常有如下的规定:
- 必须被捕获的异常:
Exception
及其子类。(不包括RuntimeException
) - 不用捕获的异常:
Error
及其子类,RuntimeException
及其子类。
因为
运行时异常
是程序运行时产生的,比如IndexOutOfBoundsException
、NullPointerException
,这种异常大量存在,并且是由程序逻辑引起的,因此 java 不要求对这些异常进行捕获和处理。
3. 捕获和处理异常
try{}
catch {}
finally {}
这里要明白,异常是根据函数调用链,一层一层向上抛的。
只需要在最上层 catch
一下即可。
这个之前一直会困扰你,觉得下层的方法如果出错了,上层的方法就拿不到错误信息了。事实上如果设计的合理,还是可以将异常 拿到的(当然,当前AE代码中很多方法的异常处理的设计都是不合理的,因此没有办法在上层拿到错误信息)
4. Assert 断言

Assert 是一种调试程序
的方法。一般不用在正式项目中。
int a = 2;
assert a<0:"this is assertion";

不满足就会报 AssertionError
一般jvm是不开启assertion的,会不编译这部分代码。
-ea
jvm参数开启。
5. 日志
SLF4J 和 LOGBACK
一般我们用这个组合来整。
后续我们看一下这个如何配置进入一个工程。
网友评论