Java中的异常都是继承自Throwable,Throwable分为error和Exception。error通常是非程序性异常,而Exception是程序出了问题,一般error类异常不需要我们处理,具体如下图所示。
Exception分为受检异常和非受检异常,受检异常是指在编译期会去做检查的异常,程序中必须要捕获或者通过throws关键字向上抛出该异常,否则编译期不通过,非受检异常又可以称之为运行时异常。
我们也可以自定义异常,继承自Exception的是受检异常,继承自RunTimeException的是非受检异常。
Java异常 - 图1

经验总结

尽量少用Exception捕获异常

Exception是一个非常通用的异常,捕获Exception无法表达出更明确的异常点。异常处理也是代码逻辑的一部分,为了使代码的可读性更强,异常应该更加的明确,让人看起来一目了然。

异常应该就近处理

尽量不要生吞异常

程序一旦走进异常处理逻辑,那么就意味着程序并没有按预想的流程执行下去。这时候我们要对异常进行处理,要么向上抛,要么打印错误日志,处理异常时最忌讳什么都不做,这样一旦出现问题,都无法通过日志定位到。