Exception和Error都是继承了Throwable类,在java中只有Throwable类型的实例才可以被抛出(throw)或者捕获 (catch),他是异常处理机制的基本组成类型。
Exception和Error体现了java对不同异常情况的分类。Exception是程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。
Error是指在正常情况下,不大可能出现的情况,绝大多数Error都会导致程序处于非正常的、不可被恢复的状态。因为是非正常情况,所以不便于也不需要捕获,比如OutOfMemoryError都是Error的子类。
Exception又分为可检查异常(checked)和不检查异常(Unchecked),不检查异常就是所谓的运行时异常,类似NullPointerException、ArrayIndexOutOfBoundsException之类,通常是可以编码避免的逻辑错误、具体根据需要来判断是否需要捕获,并不会在编译期强制要求。
Exception中RuntimeException子类就是程序自身的错误,非RuntimeException外界相关的异常。
异常的处理:
try-catch-finally:一种保护代码正常运行的机制
try···catch(catch可以有多个)
try···catch···finally
try···finally
try必须有,catch和finally至少有一个
try:正常业务逻辑代码
catch:当try发生异常,将执行catch代码,若无异常,绕之
finally:当try或catch执行结束后,必须要执行finally
catch块可以有多个,每个有不同的入口形参,当已发生的异常和某一个catch中的形参类型一样,那么将执行该catch中的代码,如果没有一个匹配,catch将不会被触发,最后进入finally。进入catch后,并不会返回到try发生异常的位置,也不会执行后续的catch块,一个异常只能进入一个catch块。catch从上到下依次匹配。小异常写在前面大异常写在末尾。
try结构中,如果有finally,finally肯定会执行。
try-catch-finally内部里面也会发生异常,所以也可以在内部写一个完整的try结构。
throws来声明异常,抛出异常采用throw(在内部类中)关键字。
调用带有throws异常方法:要么处理,要么继续向外throws。
一个方法被覆盖,覆盖他的方法必须抛出相同的异常,或者异常的子类。