Exception和Error

今天 罗同学突然问我:”为什么不OOM不直接catch住啊?”

我愣了两秒,给了以下的回答:

OOM是Error,通常情况下我们很难确定程序在特定的地方一定出现,OOM不容易被捕获。

其实这就涉及到了Exception和Error的区别了

思维导图

Throwable

Exception和Error都继承至Throwable

Error

正常情况下,不太可能出现的情况。大部分的Error会使得程序处于非正常、不可恢复的状态。不容易被捕获,也不应该被捕获。Error 比Exception更严重。

Exception

程序正常运行中,可以预料的情况。可能并且应该被捕获,并且做相应的处理。

Exception分为checked Exception 和 unChecked Exception.

checked Exception

编译时期会进行检查,必须进行显示try catch的那种Exception。常见的有IOException

unChecked Exception

我们在代码处理了checked exception之后,运行时会碰到的异常。也叫RunTimeException。 常见的有NullPointException 、ArrayIndexOutOfBoundsException等

注意事项

在看别人代码的时候我总是发现很多人不管是否能确定具体的Exception就直接catch(Exception e),其实是非常不推荐的,特别是同一段代码下我们可以确定可能出现几种错误时,我们应该分开去处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//不推荐
try {
//xx
} catch (Exception exception){
//
}



//推荐
try {
//xx
} catch (HttpException httpException){
//
}catch (JsonParseException jsonException){
//
}catch (NullPointerException nullPointException){
//
}