一、JAVA中异常类的结构
Throwable 类是 Java 语言中所有错误和异常的超类。它的两个子类分别是Error(错误)和Exception(异常)。
异常的分类有很多种,每个人有每个人的叫法,下面的分类方式不包括错误(Error),因为错误其实不属于异常的范畴,发生错误一般都会导致JVM的崩溃,进程停止。
第一种分类是检查异常和非检查异常,非检查异常包括RuntimeException及其子类,除了非检查异常都是检查异常;
第二种分类是运行时异常(RuntimeException)和非运行时异常,运行时异常包括RuntimeException及其子类,除了运行时异常都是非运行时异常。
从上面的两个分类上可以看出运行时异常和非检查异常其实是一类异常,分明显的一个判别标准就是你在编码的时候是否需要捕获异常并作出响应的处理,需要捕获的异常就是检查异常(非运行时异常),不需要的就是非检查异常(运行时异常),编译期无法检查,只有程序运行的时候才可以发现,这个异常的出现一般都是代码的问题,需要通过代码解决这类异常。
1.Error
Error有几个关键点:(1)Error发生的时间是不确定的;(2)Error一般都是底层的资源或者是系统层面的错误,例如内存溢出等;(3)Error的捕获应该在系统层面上进行
比较常见的Error一般都是VirtualMachineError,例如:StackOverflowError和OutOfMemoryError。这种错误的处理方式比Exception的处理要复杂的多,这里就不进行赘述了,以后单独写篇文章。
2.RuntimeException(运行时异常)(非检查异常)
下边会列出一些常见的运行时异常,这个问题面试初学者的时候会问,所以初学者需要仔细熟悉:
ClassCastException
IllegalArgumentException
IllegalMonitorStateException
IllegalPathStateException
IllegalStateException
IndexOutOfBoundsException
NullPointerException
SystemException
UndeclaredThrowableException
UnknownElementException
UnknownTypeException
3.检查异常(非运行时异常)
try(){
}catch(Exception e){
}finally{
}
try-catch捕获的异常一般都是检查异常。
二、异常的处理
1、throws Exception直接在方法的声明后面直接抛出,不做任何处理;
2、throw Exception在方法内部抛出,也是抛给了上一层;
3、try-catch捕获异常,程序出错后还可以继续执行,不会让程序中断,try-catch块一般伴随着finally,主要是想在异常发生后执行一些后续的处理,例如流的关闭。