1、与Error一样继承了Throwable
2、Exception分为运行时异常和受检异常
RuntimeException : 空指针异常、ArithmeticException(除法运算或取模时除数为0),强转异常、数组越界
运行时异常是程序内部运行时出现的异常,是程序本身的错误,不应通过捕获异常处理,良好的编程习惯遇到对象判空、除数做非0判断,强转时用instanceof,判断索引>0 && < length
CheckException:受检异常一般是外部错误,程序本身在执行时无法预知,比如IO异常、ClassNotFoundException等,这些异常需要捕获异常,在编译时才能通过,如果是敏感异常在捕获异常时可以转换成其他异常,或者要打印异常以便定位时要防止敏感信息泄露。
3、throw与throws
throw是遇到非预期值时主动抛出的异常,是为了禁用调用者的行为,抛出一个异常即可所以是单数
throws是程序可能抛出的异常,用在方法的名称后面,而该方法并不想处理某些异常,交由调用者处理,方法可能出现多种异常向上层抛出,所以是复数。
4、捕获异常在Android中的应用
当发生异常时如果未捕获异常而要终止时,JVM会在其线程中查询UncaughtExceptionHandler是否设置,如果设置就会调用接口方法,并传递线程和异常信息数据。我们知道Android四大组件都是在主线程的 ,所以我们只需要在主线程中设置UncaughtExceptionHandler具体实现对象即可实现我们想要做的事情,比如打印异常信息到文件中。