![](https://i-blog.csdnimg.cn/blog_migrate/4d301ab43b51727e6970966af3031257.png)
Throwable类是Java中所有 错误(Error) 或 异常(Exception)的超类。只有当对象是此类(或其子类)
之一的实例时,才能通过Java虚拟机或 Java的throw语句抛出。
(上边)
Error 是程序在运行过程中出现的无法处理的错误,比如:OutOfMemeoryError,StackOverFlowError,
ThreadDeath,NoSuchMethodError等,当这些错误发生时,程序是无法处理(try...catch捕获或throws抛出)的,JVM一般会终止线程。
(下边)
程序在编译和运行时出现的另一类错误称为异常,它是JVM通知程序员的一种方式。通过这种方式,让程序员
知道已经或可能出现的错误,要求程序员对其进行处理。
异常分为运行时异常 与 编译时异常 , 又称为 unchecked 异常 与 checked异常。
运行时异常,是RuntimeException类或其子类,即只有在运行时才出现的异常。如,NullPointerException,
ArrayIndexOutOfBoundsException, IllegalArgumentException, ClassCastException ,NumberFormat等
均属于运行时异常。这些异常类的对象 在调用某个方法的时候 ,通过 throw关键字 将异常对象抛出,再由方法
后的throws关键字 抛出 这个方法,抛给调用者。 在编译的时候,不要求必须处理(捕获 或 throws抛出)。
说明,只要代码写的足够仔细,程序足够健壮,运行时异常 一般是可以避免的。
编译时异常,也叫 检查( checked )异常,Exception类 以及 除了RuntimeException类的 直接的子类(注意:RuntimeException也是Exception类的子类)均属于编译时异常。
既在代码编写时要求必须捕获或抛出的异常,若不处理(捕获 或 throws抛出),则代码无法通过编译,比如:IOException,SQLException,ClassNotFoundException等均属于编译时异常。
RuntimeException类 及其子类以外的异常,均属于编译时异常。
=======================================================================
自定义异常部分:
用户自定义类继承Exception,属于编译时异常。
用户自定义类继承RuntimeException,属于运行时异常。
=========================================================================
异常包含三个部分:
1,new一个异常类的对象
2,通过throw关键字抛出异常, 抛在本地
3,处理异常 ! 刚通过throw关键字抛到本地的异常对象,一般都是通过throws 抛出方法外,抛给调用者,一层层的抛出,一直到表示层 ,然后在try...catch... 捕获 。
![](https://i-blog.csdnimg.cn/blog_migrate/97268b4f6160ffa445a164eb1be724c2.png)